C# 将图像文件上载到Azure blob C的正确方法#

C# 将图像文件上载到Azure blob C的正确方法#,c#,azure,asp.net-web-api,C#,Azure,Asp.net Web Api,在我的应用程序中,我们一次上载大量图像数据。通过Angular门户发出的请求和ASP.NET web API接收到的请求都托管在Azure服务器上。从API中,我直接将图像数据转换为字节并上传到Azure blob。 这是一种正确的上传方式,还是我需要先将这些图像保存在我的服务器上(比如在某个路径“C:/ImagesToUpload”)然后从那里上传到Azure blob? 我很担心,因为我们正在上传大量数据,而我现在使用的方式是否会造成内存问题,我对此一无所知。 因此,根据我的理解,如果有人,

在我的应用程序中,我们一次上载大量图像数据。通过Angular门户发出的请求和ASP.NET web API接收到的请求都托管在Azure服务器上。从API中,我直接将图像数据转换为字节并上传到Azure blob。 这是一种正确的上传方式,还是我需要先将这些图像保存在我的服务器上(比如在某个路径“C:/ImagesToUpload”)然后从那里上传到Azure blob? 我很担心,因为我们正在上传大量数据,而我现在使用的方式是否会造成内存问题,我对此一无所知。
因此,根据我的理解,如果有人

,您也可以利用直接将文件上载到Azure Blob存储,而无需先将文件发送到服务器。有关详细说明,请参见

脚本如下所示:

var uploader=new qq.azure.FineUploader({
元素:document.getElementById('fine-uploader'),
请求:{
端点:'https://.blob.core.windows.net/'
},
签名:{
端点:'https://yourapp.com/uploadimage/signature'
},
上载成功:{
端点:'https://yourapp.com/uploadimage/done'
}
});
您可以遵循并安装
fine uploader
包,然后遵循为Azure Blob存储初始化FineUploader,然后遵循为Blob容器配置CORS,并公开用于创建SAS令牌的端点。此外,这里还有一个类似的使用FineUploader的例子

从API中,我直接将图像数据转换为字节并上传到Azure blob

我很担心,因为我们正在上传大量数据,而我现在使用的方式是否会造成内存问题


对于先将文件上载到Web API端点,然后上载到azure存储blob的方法,我更喜欢使用
MultipartFormDataStreamProvider
将上载的文件存储到服务器中的临时文件中,而不是使用内存的
MultipartMemoryStreamProvider
。详细信息:您可以在本文中查看相关代码段。此外,您还可以遵循使用Web API上传文件的步骤。

我也开发了同样的东西。我们对大量文件有同样的要求。我认为您必须首先在API端压缩文件,然后使用SAS令牌在blob文件中发送它。但请确保在Azure Blob存储中,您必须传递小于5 MB大小的数据,因此我也找到了解决方案。 在这里,我有一些示例代码,经过一些测试后,这些代码将运行得非常好

 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(SettingsProvider.Get("CloudStorageConnectionString", SettingType.AppSetting));
                var blobClient = storageAccount.CreateCloudBlobClient();
                var filesContainer = blobClient.GetContainerReference("your_containername");
                filesContainer.CreateIfNotExists();
                var durationHours = 24;
                //Generate SAS Token
                var sasConstraints = new SharedAccessBlobPolicy
                {
                    SharedAccessExpiryTime = DateTime.UtcNow.AddHours(durationHours),
                    Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read
                };

                // Generate Random File Name using GUID
                var StorageFileName = Guid.NewGuid() + DateTime.Now.ToString();
                var blob = filesContainer.GetBlockBlobReference(StorageFileName);
                var blobs = new CloudBlockBlob(new Uri(string.Format("{0}/{1}{2}", filesContainer.Uri.AbsoluteUri, StorageFileName, blob.GetSharedAccessSignature(sasConstraints))));
                //Code for divide the file into the 4MB Chunk if its Greater than 4 MB then
                BlobRequestOptions blobRequestOptions = new BlobRequestOptions()
                {
                    SingleBlobUploadThresholdInBytes = 4 * 1024 * 1024, //1MB, the minimum
                    ParallelOperationThreadCount = 5,
                    ServerTimeout = TimeSpan.FromMinutes(30)
                };
                blob.StreamWriteSizeInBytes = 4 * 1024 * 1024;

                //Upload it on Azure Storage
                blobs.UploadFromByteArrayAsync(item.Document_Bytes, 0, item.Document_Bytes.Length - 1, AccessCondition.GenerateEmptyCondition(), blobRequestOptions, new OperationContext());
但在调用此函数之前,如果您有大量数据,请确保使用任何压缩技术。我使用了“zlib”库。你可以在C#NET上找到它,它是免费的。如果您想了解更多,请访问此网站