如何解决云存储桶在生产中一次不会保存两个文件
在开发中,以下代码成功上传了图像文件,并调整了缩略图的大小
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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。