问题描述
private string uploadFile(IFormFile file,FileType fileType,UserDTO userDTO)
{
try
{
var storageObject = storageClient.UploadobjectAsync(
bucket: bucketId,objectName: getUniqueFileName(userDTO.UserId,getFileType(fileType)),contentType: file.ContentType,source: file.OpenReadStream(),options: new UploadobjectOptions { PredefinedAcl = PredefinedobjectAcl.PublicRead }
);
return storageObject.Result.MediaLink;
}
catch (Exception ex)
{
logger.LogError("An error ocurred while uploading file,message: " + ex.Message);
return "";
}
}
private string uploadImageThumbnail(IFormFile file,UserDTO userDTO)
{
try
{
using var resourceImage = file.OpenReadStream();
Image image = Image.FromStream(resourceImage);
Image thumb = image.GetThumbnailImage(96,96,() => false,IntPtr.Zero);
thumb.Save(resourceImage,ImageFormat.Png);
var storageObject = storageClient.UploadobjectAsync(
bucket: bucketId,source: resourceImage,options: new UploadobjectOptions { PredefinedAcl = PredefinedobjectAcl.PublicRead }
);
return storageObject.Result.MediaLink;
}
catch (Exception ex)
{
logger.LogError("An error ocurred while uploading file,message: " + ex.Message);
return "";
}
}
但是由于某些原因,我无法在生产环境中使用它。在“生产”存储桶中,只有使用uploadFile(file,fileType,userDTO)
的第一个文件被成功保存,而缩略图没有被保存。
在这里您可以看到两个存储桶信息,因为它们是相同的。
生产中的基础设施: 在App Engine Flex中运行的.NET Core 3.1 MVC App
发展中的基础设施: 在Visual Studio中捆绑的IISExpress中运行的.NET Core 3.1 MVC App
也许是我使用了错误的东西,或者App Engine Flexible由于某种原因不能执行这些请求?
当然可以改进代码,但是我不明白的是为什么在开发中行之有效,而在生产中却行不通。 ?
解决方法
对于将来寻求此功能的用户,我选择使用https://github.com/SixLabors/ImageSharp而不是System.Drawing.Common软件包。似乎GDI +缺少一些库(尽管您可以使用Dockerfile来做到这一点,但我不确定如何配置App Engine的Flex环境并在服务器中下载一些GDI +所需的库),而ImageSharp只是负责该工作。没有安装任何东西。我只是使用Visual Studio从NuGet下载的。
来自GitHub:
ImageSharp是全新的,功能齐全,管理全面的跨平台2D 图形库。旨在简化图像处理的ImageSharp 为您带来了强大而又精美的API。