云存储桶在生产中不会一次保存两个文件
Cloud storage bucket does not save two files at a time in production
在开发中,以下代码成功上传了图像文件并调整了缩略图的大小
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, FileType fileType, 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,
objectName: getUniqueFileName(userDTO.UserId, getFileType(fileType)),
contentType: file.ContentType,
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 "";
}
}
但出于某种原因,我无法在生产环境中使用它。在 'production' 存储桶中,只有使用 uploadFile(file, fileType, userDTO)
的第一个文件成功保存,但缩略图没有。
在这里您可以看到两个存储桶的信息,因为您可以看到它们是相同的。
生产中的基础设施:
App Engine Flex
中的 .NET Core 3.1 MVC 应用程序 运行
发展中的基础设施:
IISExpress 中的 .NET Core 3.1 MVC 应用 运行 捆绑在 Visual Studio
中
也许是我使用错误或者 App Engine Flexible 出于某种原因无法执行这些请求?
也许代码当然可以改进,但我不明白的是为什么在开发中这行得通,但在生产中却不行。
对于那些将来寻求这个的人,我选择使用 https://github.com/SixLabors/ImageSharp 而不是 System.Drawing.Common 包。似乎 GDI+ 缺少一些库(我不确定如何配置 App Engine 的 Flex 环境并在服务器中下载一些 GDI+ 所需的库,尽管你可以使用 Dockerfile 来完成)而 ImageSharp 会处理这个问题无需安装任何东西。我刚刚使用 Visual Studio.
从 NuGet 下载了它
来自GitHub:
ImageSharp is a new, fully featured, fully managed, cross-platform, 2D
graphics library. Designed to simplify image processing, ImageSharp
brings you an incredibly powerful yet beautifully simple API.
在开发中,以下代码成功上传了图像文件并调整了缩略图的大小
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, FileType fileType, 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,
objectName: getUniqueFileName(userDTO.UserId, getFileType(fileType)),
contentType: file.ContentType,
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 "";
}
}
但出于某种原因,我无法在生产环境中使用它。在 'production' 存储桶中,只有使用 uploadFile(file, fileType, userDTO)
的第一个文件成功保存,但缩略图没有。
在这里您可以看到两个存储桶的信息,因为您可以看到它们是相同的。
生产中的基础设施: App Engine Flex
中的 .NET Core 3.1 MVC 应用程序 运行发展中的基础设施: IISExpress 中的 .NET Core 3.1 MVC 应用 运行 捆绑在 Visual Studio
中也许是我使用错误或者 App Engine Flexible 出于某种原因无法执行这些请求?
也许代码当然可以改进,但我不明白的是为什么在开发中这行得通,但在生产中却不行。
对于那些将来寻求这个的人,我选择使用 https://github.com/SixLabors/ImageSharp 而不是 System.Drawing.Common 包。似乎 GDI+ 缺少一些库(我不确定如何配置 App Engine 的 Flex 环境并在服务器中下载一些 GDI+ 所需的库,尽管你可以使用 Dockerfile 来完成)而 ImageSharp 会处理这个问题无需安装任何东西。我刚刚使用 Visual Studio.
从 NuGet 下载了它来自GitHub:
ImageSharp is a new, fully featured, fully managed, cross-platform, 2D graphics library. Designed to simplify image processing, ImageSharp brings you an incredibly powerful yet beautifully simple API.