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