我有一个C#Web应用程序,它将图像文件上传到Azure Blob存储。我从文本框(没有文件上载控制器)传递图像文件的本地路径。此应用程序按预期在本地工作。但是当我在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);
}
答案 0 :(得分:1)
无法找到文件(文件名)
当您将Web应用程序发布到Azure时,异常是由System.IO.File.OpenRead(filePath)
引起的。如果要使用System.IO.File.OpenRead(filePath),则需要确保可以在WebApp中找到文件路径。
应该在Azure上运行它做了哪些更改?
如果要使用Azure上的代码,则需要确保可以在Azue网站中找到该文件。您需要将文件复制到Azure。如果要将文件上载到Azure blob,则不建议使用。因此,您需要先将文件复制到Azure WebApp。
另外正如您所提到的,您可以使用FileUpload Controller来执行此操作。
答案 1 :(得分:0)
您可能正在使用计算机的路径,该路径在天蓝色方面会有所不同。您可以尝试将路径更改为以下内容:
string path = HostingEnvironment.ApplicationPhysicalPath + @"\YourProjectName\PathToFile"
答案 2 :(得分:0)
好的,找到了解决方案。我没有将文件路径传递给文本框,而是使用了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);