使用UploadFromFile将文件上载到Azure

时间:2017-03-24 06:31:56

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

我有一个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   (86)\ IIS   快递\〜\ RasterEdge_Cache \ 193304798925 \输出\ A-0002-00008-00205Anno.pdf'

我认为文件路径不正确,我应该使用什么路径,或者我正确使用UploadFromFile?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

  

类型' Microsoft.WindowsAzure.Storage.StorageException'的例外情况发生在Microsoft.WindowsAzure.Storage.dll但未在用户代码中处理附加信息:远程服务器返回错误:(404)未找到。所以问题是,我使用的是正确的函数:UploadFromFile吗? blockBlob.UploadFromFile(b.FilePath);

根据此article,"远程服务器返回错误:(404)Not Found。"当针对容器的上载操作因未找到容器或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);
         }