![](/img/trans.png)
[英]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.