云存储桶在生产中一次不会保存两个文件

问题描述

在开发中,以下代码成功上传了图像文件,并调整了缩略图的大小

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)的第一个文件被成功保存,而缩略图没有被保存。

在这里您可以看到两个存储桶信息,因为它们是相同的。

Buckets

生产中的基础设施: 在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。