В процессе разработки следующий код успешно загружает файл изображения и его миниатюру с измененным размером.
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 "";
}
}
Но по какой-то причине я не могу заставить это работать в производственной среде. В «производственном» сегменте успешно сохраняется только первый файл с использованием uploadFile(file, fileType, userDTO)
, а миниатюра — нет.
Здесь вы можете увидеть информацию об обоих сегментах, так как вы видите, что они идентичны.
Рабочая инфраструктура: приложение .NET Core 3.1 MVC, работающее в App Engine Flex
Инфраструктура в разработке: приложение .NET Core 3.1 MVC, работающее в IISExpress, объединенное в Visual Studio
Возможно, я что-то использую неправильно или App Engine Flexible по какой-то причине не может выполнять эти запросы?
Возможно, конечно, код можно улучшить, но я не понимаю, почему в разработке это работает, а в производстве — нет. ????
fail: FileUploadServiceDefault[0] An error ocurred while uploading file, message: The type initializer for 'Gdip' threw an exception.
Я только что увидел это, возможно, это связано с ОС, в которой App Engine Flex работает в фоновом режиме? Я использую класс System.Drawing.Image для изменения размера изображения. - person Luis Mezas   schedule 20.08.2020