簡體   English   中英

上傳文件而不將內容復制到根文件夾 .NET Core 2.2

[英]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 Uffnerpinkfloydx33 所指出的,上面的代碼可以這樣優化

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM