我有一个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?
感谢您的帮助。
答案 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);
}