-AWS C # .Net Core - Как загрузить изображение .jpg в корзину S3, не сохраняя его в виде файла - PullRequest
0 голосов
/ 28 июня 2019

Я использую AWS Lambda C # .Net core

Я пытаюсь загрузить файл .jpg, не сохраняя его на локальном компьютере (не разрешено в развернутой функции Lambda)

Я получаю файл в шестнадцатеричной форме и могу перекодировать его в двоичный файл, сохранить как файл и даже загрузить его из локальной отладки в обычном режиме.

int len = image.ImagePayload.Length;
byte[] bin = new byte[len / 2];
for (int i = 0; i < len; i += 2)
{
    bin[i / 2] = Convert.ToByte(image.ImagePayload.Substring(i, 2), 16);
}

File.WriteAllBytes(image.ImageName, bin);

PutObjectRequest putObj = new PutObjectRequest
{
    BucketName = input.Bucket,
    FilePath = image.ImageName,
    ContentType = "image/jpg",
    Key = image.ImageName
};
PutObjectResponse putResp = S3Client.PutObjectAsync(putObj).Result;

При полном развертывании AWS Lambda происходит сбой с «Файловой системой только для чтения»

Есть ли способ загрузить на S3 без сохранения данных в файл?

1 Ответ

2 голосов
/ 29 июня 2019

Вместо FilePath вы можете использовать InputStream на PutObjectRequest.

byte bin = ...

using (var stream = new MemoryStream(bin))
{
    var request = new PutObjectRequest
    {
        BucketName = input.Bucket,
        InputStream = stream,
        ContentType = "image/jpg",
        Key = image.ImageName
    }

    var response = await S3Client.PutObjectAsync(request).ConfigureAwait(false);
}

Ref: https://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Model_PutObjectRequest.htm

...