C#文件上传在本地工作;不在Azure上

时间:2018-06-07 10:18:58

标签: c# file azure azure-storage azure-storage-blobs

我有一个C#Web应用程序,它将图像文件上传到Azure Blob存储。我从文本框(没有文件上载控制器)传递图像文件的本地路径。此应用程序按预期在本地工作。但是当我在Azure上发布它时,它会抛出异常。

  

无法找到文件(文件名)

应该在Azure上运行它做了哪些更改?

代码:

CloudBlobContainer container = Program.BlobUtilities.GetBlobClient.GetContainerReference(Container);// container 
            container.CreateIfNotExists();
            container.SetPermissions(new BlobContainerPermissions
            {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });
            CloudBlobDirectory directory = container.GetDirectoryReference(foldername);
            // Get reference to blob (binary content)
            CloudBlockBlob blockBlob_image = directory.GetBlockBlobReference(imageid);
                 using (var filestream = System.IO.File.OpenRead(image_path))
                {
                    blockBlob_image.UploadFromStream(filestream);
                }

3 个答案:

答案 0 :(得分:1)

  

无法找到文件(文件名)

当您将Web应用程序发布到Azure时,异常是由System.IO.File.OpenRead(filePath)引起的。如果要使用System.IO.File.OpenRead(filePath),则需要确保可以在WebApp中找到文件路径。

  

应该在Azure上运行它做了哪些更改?

如果要使用Azure上的代码,则需要确保可以在Azue网站中找到该文件。您需要将文件复制到Azure。如果要将文件上载到Azure blob,则不建议使用。因此,您需要先将文件复制到Azure WebApp。

另外正如您所提到的,您可以使用FileUpload Controller来执行此操作。

答案 1 :(得分:0)

您可能正在使用计算机的路径,该路径在天蓝色方面会有所不同。您可以尝试将路径更改为以下内容:

string path = HostingEnvironment.ApplicationPhysicalPath + @"\YourProjectName\PathToFile"

答案 2 :(得分:0)

好的,找到了解决方案。我没有将文件路径传递给文本框,而是使用了FileUpload Controller。在代码隐藏中,

Stream image_path = FileUpload1.FileContent;

实际上,我之前也尝试过使用FileUpload控制器,但Server.MapPath(FileUpload1.Filename)Path.GetFullPath(FileUpload1.FileName)未提供正确的路径。

此外,

           using (var filestream = image_path)
           {
        blockBlob_image.UploadFromStream(image_path);
           }

替换为

blockBlob_image.UploadFromStream(image_path);