【问题标题】:Zipping files and uploading to Azure Blobstorage using filestream使用文件流压缩文件并上传到 Azure Blob 存储
【发布时间】:2021-11-19 15:14:53
【问题描述】:

我正在使用 ASP.NET Core 创建一个网站,我需要获取一堆文件,将它们压缩在一起,然后将它们上传到 Azure Blobstorage。 它成功了,我得到了一个下载链接,但是当我下载文件时,我只得到一个“文件”,我无法用任何东西打开。

这是处理上传的代码:

            var moduleVersionReleaseFiles = _appDbContext
                .ModuleVersionReleaseFile
                .Where(x => x.ModuleVersionReleaseId == moduleVersionReleaseId)
                .ToList();

            string AzureBlobStorageConfig = _configuration["AzureBlobStorage"];
            var connectionString = _configuration["StorageConnectionString"];
            string containerName = moduleVersionReleaseId + "-" + Guid.NewGuid().ToString();

            BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
            BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName.ToLowerInvariant(), Azure.Storage.Blobs.Models.PublicAccessType.BlobContainer);

            BlobClient blobClient = containerClient.GetBlobClient(moduleVersionReleaseId.ToString());

            using var stream = new MemoryStream();
            using (var archive = new ZipArchive(stream, ZipArchiveMode.Create))
            {
                foreach (var moduleVersionReleaseFile in moduleVersionReleaseFiles)
                {
                    var entry = archive.CreateEntry(moduleVersionReleaseFile.File);
                    using (var entryStream = entry.Open())
                    using (var fileStream = File.OpenRead($"{moduleVersionReleaseFile.Path}\\{moduleVersionReleaseFile.File}"))
                    {
                        await fileStream.CopyToAsync(entryStream);
                    }
                }

                stream.Position = 0;
                await blobClient.UploadAsync(stream, true);
                await stream.FlushAsync();
            }

            return blobClient.Uri.ToString();

我正在使用 Azurite 进行测试,所以我无法登录 blobstorage 并在那里查看。

为什么在按预期下载文件时没有得到一个 zip 文件?

【问题讨论】:

  • How can I get an actual zip file there? 是什么意思?
  • 最后一行代码 blobclient.Uri.Tostring() 返回上传的文件,但我无法用任何东西打开这个文件,我期待的是一个 zip 文件。
  • 你遇到了什么错误?
  • 没有错误,一切正常,但下载的文件是无法用任何东西打开的“文件”,而不是 zip 文件

标签: azure asp.net-core azure-blob-storage


【解决方案1】:

您无法打开 zip 文件的原因是它没有正确保存。请您尝试以下代码:

using var stream = new MemoryStream();
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create))
{
    foreach (var moduleVersionReleaseFile in moduleVersionReleaseFiles)
    {
        var entry = archive.CreateEntry(moduleVersionReleaseFile.File);
        using (var entryStream = entry.Open())
        var fileContents = File.ReadAllBytes($"{moduleVersionReleaseFile.Path}\\{moduleVersionReleaseFile.File}"));
        using (BinaryWriter zipFileBinary = new BinaryWriter(entryStream))
        {
            zipFileBinary.Write(fileContents);
        }
    }
    stream.Position = 0;
    await blobClient.UploadAsync(stream, true);
}

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2012-03-22
    • 1970-01-01
    • 2021-06-03
    • 2017-01-24
    • 2017-08-19
    • 2013-08-21
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多