【问题标题】:Azure File Storage - File is corrupted once uploadedAzure 文件存储 - 上传后文件已损坏
【发布时间】:2016-09-27 10:10:17
【问题描述】:

我有这段代码,用于在 azure 文件存储容器中上传文件。

        var originalFileName = GetDeserializedFileName(result.FileData.First());

        var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName);

        var uploadFolder = "/AzureDocuments" + '/' + correctLoanId ;
        var patString = HttpContext.Current.Server.MapPath(uploadFolder) + "/" + originalFileName;

        if(!Directory.Exists(HttpContext.Current.Server.MapPath(uploadFolder)))
        {
            Directory.CreateDirectory(HttpContext.Current.Server.MapPath(uploadFolder + '/' + correctLoanId));
        }

        if (!File.Exists(patString))
        {
            File.Copy(uploadedFileInfo.FullName, patString);
        }

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
            CloudConfigurationManager.GetSetting("StorageConnectionString"));

        CloudFileClient fileClient = storageAccount.CreateCloudFileClient();

        CloudFileShare share = fileClient.GetShareReference("documents");
        CloudFileDirectory rootDir = share.GetRootDirectoryReference();

        CloudFileDirectory sampleDir = rootDir.GetDirectoryReference(correctLoanId);

        sampleDir.CreateIfNotExists();

        CloudFile cloudFile = sampleDir.GetFileReference(originalFileName);

        try
        {
            //Open a stream from a local file.
            Stream fileStream = File.OpenRead(patString);
            cloudFile.UploadFromStreamAsync(fileStream);
            fileStream.Dispose();

        }
        catch (Exception ex)
        {
        }

文件已正确上传,正确的大小以 azure 显示,但是当我下载文件时,我收到文件已损坏的错误消息。

知道我做错了什么吗?

【问题讨论】:

  • 你是如何下载文件的?使用 SAS 还是以编程方式下载?
  • 我正在尝试直接从 azure 门户和通过使用 azure 权限创建的链接但两种方式的输出相同
  • 只是好奇....你为什么不等待这个电话 - cloudFile.UploadFromStreamAsync(fileStream);?不应该是await cloudFile.UploadFromStreamAsync(fileStream);吗?
  • 我会改变的。你认为这会改变事情吗?谢谢
  • 我会这么认为。相反,请尝试执行类似cloudFile.UploadFromStream(fileStream); 的操作,即将其更改为同步方法而不是异步。看看有没有帮助。

标签: c# azure azure-storage azure-sdk-.net azure-files


【解决方案1】:

您的文件损坏的原因是以下代码行:

cloudFile.UploadFromStreamAsync(fileStream);

本质上,您正在启动一个异步进程,但没有等待它完成。要解决此问题,您可以执行以下任一操作:

使用sync这个方法的版本:

cloudFile.UploadFromStream(fileStream);

或者,等待async 方法完成(推荐):

await cloudFile.UploadFromStreamAsync(fileStream);

请注意,如果您使用异步方法,则还需要使调用方法异步。

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 2020-01-14
    • 2017-08-29
    • 1970-01-01
    • 2017-06-27
    • 2013-10-24
    • 2018-06-21
    • 2023-03-20
    相关资源
    最近更新 更多