【问题标题】:Uploading a file to Azure using UploadFromFile使用 UploadFromFile 将文件上传到 Azure
【发布时间】:2017-08-17 00:01:56
【问题描述】:

我有一个 ASP.NET Web 窗体应用程序。

在我的一个表单中,我正在从 Azure 下载 PDF,它使用 rasteredge(PDF 查看器)显示,这允许我在 PDF 上添加和保存注释。

然后将带有注释的文件保存在我的应用程序根目录 (RasterEdge_Cache) 的文件夹中。 我想使用 UploadFromFile 函数将 PDF 上传回 Azure。

这是我正在使用的功能:

public static void UploadFile(DTO.BlobUpload b)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["SN_ZEUXYS"]);
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();            
    CloudBlobContainer container = blobClient.GetContainerReference(b.Container);
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(b.FileName);
    // b.FilePath = "~/RasterEdge_Cache/193304798925/output/A-0002-00008-00205Anno.pdf"
    blockBlob.UploadFromFile(b.FilePath);
}

这是我收到的错误消息:

发生“System.IO.DirectoryNotFoundException”类型的异常 在 mscorlib.dll 中,但未在用户代码中处理 信息:找不到路径“C:\Program Files”的一部分 (x86)\IIS Express\~\RasterEdge_Cache\193304798925\output\A-0002-00008-00205Anno.pdf'。

我假设文件路径不正确,我应该使用什么路径,或者我是否正确使用了 UploadFromFile?

感谢您的帮助。

【问题讨论】:

    标签: c# asp.net webforms azure-storage


    【解决方案1】:

    您的文件路径是一个相对路径,因此您应该指定它的确切位置。考虑使用Server.MapPath 方法来找出它到服务器上应用程序根目录的物理路径。

    HttpContext httpContext = HttpContext.Current;
    HttpServerUtility server = httpContext.Server;
    b.FilePath = server.MapPath("~/RasterEdge_Cache/193304798925/X.pdf")
    

    【讨论】:

    • 嗨,我仍然有一条错误消息,但看起来该文件已通过 server.MapPath 找到。现在这是我的错误。 Microsoft.WindowsAzure.Storage.dll 中出现“Microsoft.WindowsAzure.Storage.StorageException”类型的异常,但未在用户代码中处理附加信息:远程服务器返回错误:(404) 未找到。所以问题是,我是否使用了正确的函数:UploadFromFile? blockBlob.UploadFromFile(b.FilePath);或者我应该使用另一个函数,我应该使用什么函数以及如何使用。
    • 这似乎是一个配置问题。请将您的 Azure 配置添加到您的问题中。 (考虑隐藏敏感信息。)
    • 我不认为这是 Azure 配置问题,因为我使用此配置将文件流式传输回同一存储。这是我的网络配置中的应用程序密钥:
    【解决方案2】:

    Microsoft.WindowsAzure.Storage.dll 中出现“Microsoft.WindowsAzure.Storage.StorageException”类型的异常,但未在用户代码中处理附加信息:远程服务器返回错误:(404) 未找到。所以问题是,我是否使用了正确的函数:UploadFromFile? blockBlob.UploadFromFile(b.FilePath);

    根据这个article,“远程服务器返回错误:(404)未找到。”当针对容器的上传操作因找不到容器或 blob 而失败时发生。

    所以我建议你可以先检查“b.Container,b.FileName”的值是否存在,或者你可以使用 CreateIfNotExists 方法。

    更多细节,你可以参考下面的代码。希望它能给你一些提示。

     protected void Button5_Click(object sender, EventArgs e)
            {
                CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection string");
                CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                //check the b.Container value is right and exists
                CloudBlobContainer container = blobClient.GetContainerReference("foobar");
                CloudBlockBlob blockBlob = container.GetBlockBlobReference("TestFile.pdf");
                HttpContext httpContext = HttpContext.Current;
                HttpServerUtility server = httpContext.Server;
                string FilePath = server.MapPath("~/test/TestFile.pdf");
                //by using this code will create the container if not exists
                container.CreateIfNotExists();
                blockBlob.UploadFromFile(FilePath);
             }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 2020-12-28
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2021-05-14
      • 2017-03-14
      相关资源
      最近更新 更多