Путаница с использованием Stream vs byte [] для передачи содержимого файла - PullRequest
0 голосов
/ 21 октября 2019

Чего я хочу добиться - это прочитать изображение JPEG с диска, изменить его размер (уменьшить разрешение) и вернуть полученное изображение в другой модуль, который собирается сохранить изображение в корзину AWS S3 ... запутался, должен ли я возвращать полученное изображение в byte[] или MemoryStream.

Я видел этот урок и написал следующую функцию, которая читает изображение, изменяет его размер и возвращаетрезультирующее изображение в byte[].

public byte[] GetResizedImage(string folderPath, string fileName)
{
    // read the original image from disk
    FileInfo originalImage = ReadFileFromDisk(folderPath, fileName);

    // resize the image, set width to 640px and respect original aspect ratio 
    using (var image = Image.FromStream(originalImage.OpenRead()))
    {
        int newWidth = image.Width;
        int newHeight = image.Height;
        float aspectRatio = image.Width / image.Height;

        if (image.Width > 640)
        {
            newWidth = 640;
            newHeight = Convert.ToInt32(GlobalConstants.NoOfPixelsForImageResizing / aspectRatio);
        }

        // resize image           
        Image thumbnail = image.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);

        using (var thumbnailStream = new MemoryStream())
        {
            thumbnail.Save(thumbnailStream, ImageFormat.Jpeg);
            return thumbnailStream.ToArray(); // <-- return image in byte[]
        }
    }
}

Мне не ясно, имеет ли какое-то значение изменение вышеуказанного кода и возврат MemoryStream вместо byte[]? Если я изменю код для возврата MemoryStream, тогда мне нужно изменить последние 3 строки на:

var thumbnailStream = new MemoryStream();
thumbnail.Save(thumbnailStream, ImageFormat.Jpeg);
return thumbnailStream;

Таким образом, я не смогу избавиться от MemoryStream ... не уверенесли это будет плохой практикой?

Причина этого вопроса заключается в том, что мой другой модуль, который сохраняет уменьшенное изображение в корзину S3, принимает входной файл как поток:

SavetoS3bucket(Stream image, string name)
{
    // save image to S3 bucket
}

Так что мне не ясно, лучше ли мне передать Stream или byte[] вышеописанному методу?

...