[英]Read file content on a file share using .Net 2.2 core running on Linux
[英]Uploading file without copying content to root folder .NET Core 2.2
我正在使用 Azure Blob 存储,我想知道是否可以稍微优化此代码。
正如您所看到的,我正在创建文件夹,然后在发送到 Azure 存储之前将内容上传到该文件夹,并且在竞争时我删除了该文件夹,公平地说,这似乎有点多余。
现在,我想知道是否可以跳过这几个步骤,直接将流上传到 azure 而无需先复制到根文件夹?
这是代码:
public async Task UploadBlobFile(IFormFile file, BlobMetadata metadata, string containerName)
{
var containerClient = _blobServiceClient.GetBlobContainerClient(containerName);
BlobHttpHeaders headers = new BlobHttpHeaders
{
ContentType = "application/pdf",
ContentLanguage = "hr-HR",
};
if (file.Length > 0)
{
try
{
var rootFolder = Path.Combine(_hostingEnvironment.WebRootPath, "upload");
if (!Directory.Exists(rootFolder))
{
Directory.CreateDirectory(rootFolder);
}
// create folder if doesnt exists
var filePath = Path.Combine(rootFolder, file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
// set cursor to the beginning of the stream.
stream.Position = 0;
var metadataProperties = new Dictionary<string, string>
{
{ MetadataValues.Id, metadata.Id },
{ MetadataValues.Name, metadata.Name },
{ MetadataValues.UniqueName, metadata.UniqueName }
};
var blobClient = containerClient.GetBlobClient(file.FileName);
await blobClient.UploadAsync(stream, headers, metadataProperties);
}
if (File.Exists(filePath))
{
File.Delete(filePath);
}
}
catch (Exception ex)
{
throw ex;
}
}
}
正如Bradley Uffner和pinkfloydx33 所指出的,上面的代码可以这样优化
public async Task UploadBlobFile(IFormFile file, BlobMetadata metadata, string containerName)
{
var containerClient = _blobServiceClient.GetBlobContainerClient(containerName);
BlobHttpHeaders headers = new BlobHttpHeaders
{
ContentType = "application/pdf",
ContentLanguage = "hr-HR",
};
if (file.Length > 0)
{
using (var stream = file.OpenReadStream())
{
// set cursor to the beginning of the stream.
stream.Position = 0;
var metadataProperties = new Dictionary<string, string>
{
{ MetadataValues.Id, metadata.Id },
{ MetadataValues.Name, metadata.Name },
{ MetadataValues.UniqueName, metadata.UniqueName }
};
var blobClient = containerClient.GetBlobClient(file.FileName);
await blobClient.UploadAsync(stream, headers, metadataProperties);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.