Azure 文件存储 - 文件在上传后损坏

Azure File Storage - File is corrupted once uploaded

我有这段代码,用于在 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)
        {
        }

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

知道我做错了什么吗?

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

cloudFile.UploadFromStreamAsync(fileStream);

本质上,您是在启动一个异步进程,而不是等待它完成。要修复,您可以执行以下任一操作:

使用此方法的 sync 版本:

cloudFile.UploadFromStream(fileStream);

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

await cloudFile.UploadFromStreamAsync(fileStream);

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