C# 使用UploadFromFile将文件上载到Azure

C# 使用UploadFromFile将文件上载到Azure,c#,asp.net,webforms,azure-storage,C#,Asp.net,Webforms,Azure Storage,我有一个ASP.NET Web表单应用程序 在我的一个表单中,我正在从Azure下载一个PDF,它使用rasteredge(PDF查看器)显示,这允许我在PDF上添加和保存注释 然后,带有注释的文件保存在我的应用程序根目录下的文件夹(RasterEdge_缓存)中。 我想使用UploadFromFile函数将PDF上传回Azure 这是我正在使用的函数: public static void UploadFile(DTO.BlobUpload b) { CloudStorageAccou

我有一个ASP.NET Web表单应用程序

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

然后,带有注释的文件保存在我的应用程序根目录下的文件夹(RasterEdge_缓存)中。 我想使用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


谢谢你的帮助

您的文件路径是一个相对路径,因此您应该指定它与哪个位置精确相关。考虑使用方法找出其物理路径到服务器上的应用程序的根。
HttpContext httpContext = HttpContext.Current;
HttpServerUtility server = httpContext.Server;
b.FilePath = server.MapPath("~/RasterEdge_Cache/193304798925/X.pdf")
Microsoft.WindowsAzure.Storage.dll中发生类型为“Microsoft.WindowsAzure.Storage.StorageException”的异常,但未在用户代码中处理其他信息:远程服务器返回错误:(404)未找到。所以问题是,我是否使用了正确的函数:UploadFromFile?blockBlob.UploadFromFile(b.FilePath)

根据这一点,“远程服务器返回了一个错误:(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);
         }

您好,我仍然有一条错误消息,但似乎已使用server.MapPath找到该文件。这就是我的错误。Microsoft.WindowsAzure.Storage.dll中发生类型为“Microsoft.WindowsAzure.Storage.StorageException”的异常,但未在用户代码中处理其他信息:远程服务器返回错误:(404)未找到。所以问题是,我是否使用了正确的函数:UploadFromFile?blockBlob.UploadFromFile(b.FilePath);或者我应该使用另一个函数,我应该使用什么函数以及如何使用。这似乎是一个配置问题。请将Azure配置添加到问题中。(考虑隐藏敏感信息。)我不认为这是Azure配置问题,因为我使用此配置将文件流回到同一存储中。这是我的web配置中的应用程序密钥: