【问题标题】:C# File Upload works locally; not on AzureC# 文件上传在本地工作;不在 Azure 上
【发布时间】:2018-06-11 10:54:42
【问题描述】:

我有一个将图像文件上传到 Azure Blob 存储的 C# Web 应用程序。我从文本框(没有文件上传控制器)传递图像文件的本地路径。此应用程序按预期在本地工作。但是当我在 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);
                }

【问题讨论】:

  • 您正试图通过指向您计算机上的文件来“上传”一个文件。因此,当您在您的计算机上 运行该网站时,它就会工作。如果您在其他地方运行网站,它将无法找到该文件。这不是上传,而是复制文件。实现正确上传到控制器。
  • 我正在使用网络表单。不是mvc。此外,即使使用 FileUpload Control,它也会给出同样的错误

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


【解决方案1】:

找不到文件(文件名)

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

应该进行哪些更改才能在 Azure 上运行它?

如果您想在 Azure 上使用代码,您需要确保可以在 Azue 网站上找到该文件。您需要将该文件复制到 Azure。如果要将文件上传到 Azure blob,则不建议这样做。因为您需要先将文件复制到 Azure WebApp。

正如你提到的,你可以使用 FileUpload Controller 来做到这一点。

【讨论】:

    【解决方案2】:

    您可能使用的计算机路径在 azure 上会有所不同。您可以尝试将路径更改为以下内容:

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

    【讨论】:

    • 我想要像“C:\Users\User\Desktop\1.jpg”这样的路径。 'Using Server.MapPath(FileUpload1.FileName)' 或 'Path.GetFullPath(..)' 给出不同的值。
    • 您可以尝试使用失败的代码编辑您的帖子吗?
    • 否则很难发现你的问题
    【解决方案3】:

    好的,找到了解决方案。我没有将文件路径传递给文本框,而是使用了 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2021-09-15
      • 2013-04-23
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多