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

时间:2016-09-27 10:10:18

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

我有这个代码,我用它来上传天文件存储容器中的文件。

        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显示,但是当我下载文件时,我收到错误消息,指出该文件已损坏。

我知道我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

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

cloudFile.UploadFromStreamAsync(fileStream);

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

使用此方法的sync版本:

cloudFile.UploadFromStream(fileStream);

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

await cloudFile.UploadFromStreamAsync(fileStream);

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