我正在使用ASPNetBoilerplate作为基本框架,并使用.Net Core模板,并且尝试将照片上传到Blob存储。 该网站托管在Azure Web App中,并且Blob存储在同一订阅中。
我正在使用以下代码,当我在调试模式下本地运行它时,它可以工作,但是一旦将其部署到Azure时,我收到一个无法找到文件D:\ public \ images \ <的错误。 / p>
任何人都可以看到我对于azure部署所做的不正确的操作,或者为什么它可以在本地运行但不能在Azure中运行。
我正在尝试从guid生成上传的文件名,将图像上传到azure,然后将生成的文件名存储到sql数据库中。
任何帮助或建议将不胜感激。
public async Task<ICollection<BlogImage>> UploadFileAsync(ICollection<IFormFile> files, string RecordType, int id) {
ICollection<BlogImage> _blogImages = new Collection<BlogImage>();
string imageFullPath = null;
if (files == null || files.Count == 0)
{
await Task.FromException(new Exception("No File Supplied"));
}
try
{
//Connect To Azure
CloudStorageAccount cloudStorageAccount = GetAuth();
//Create a refernce to blob client
CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
//Create a reference to the container
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("images");
if (await cloudBlobContainer.CreateIfNotExistsAsync())
{
await cloudBlobContainer.SetPermissionsAsync(
new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
}
);
}
foreach (var file in files)
{
string imageName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(RecordType + "/" +id.ToString() + "/" + imageName);
cloudBlockBlob.Properties.ContentType = file.ContentType;
// Stream fileStream = File.OpenRead(file)
Logger.Info("file name is: " + file.FileName + " Name is: " + file.Name + " Generated Name is: " + imageName);
using (Stream fileStream = File.OpenRead(file.FileName))
{
Logger.Info("File Opened;");
// Upload the file
await cloudBlockBlob.UploadFromStreamAsync(fileStream);
System.Drawing.Image image = System.Drawing.Image.FromStream(fileStream);
var im = new BlogImage { ImageName = imageName, Size = file.Length, ContentType = file.ContentType, Height = image.Height, Width = image.Width };
fileStream.Dispose();
_Images.Add(im);
}
imageFullPath = cloudBlockBlob.Uri.ToString();
}
}
catch (Exception ex)
{
Logger.Error("Exception triggered: " + ex.Message);
_telemetryClient.TrackException(ex);
}
return _Images;
}
答案 0 :(得分:0)
您使用File.OpenRead
方法读取带有路径的文件流(该路径可能不存在-取决于您用来承载该应用程序的Azure服务)。但是,您可能应该对传递的OpenReadStream()
使用IFormFile
来获取流。
答案 1 :(得分:0)