9

В моем приложении, я буду отправлять фотографии непосредственно от клиента к s3, используя что-то похожее на это предложил Heroku рекомендацию: https://devcenter.heroku.com/articles/s3-upload-nodeКак передать изображение base64 с клиента на сервер или загрузить двоичный/base64 из s3 bucket?

Основное преимущество состоит в том, что она экономит стоимость сервера (я предполагаю, так как куски Арен» t отправляется на сервер, используя что-то вроде данных формы multipart-y).

Однако я хочу, чтобы иметь возможность разделить эти изображения щебета также, в котором говорится, это требование:

Убедитесь, что сообщение является запросом многочастных/форм-данных. Или загрузите необработанный двоичный файл (параметр мультимедиа) файла или его содержимое, закодированное в base64 (параметр media_data). Используйте сырой двоичный файл, если это возможно, потому что результаты кодирования base64 в больших размерах файлов

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

TLDR

Мне нужно отправить свои фотографии, используя данные mulitparty/многочастной форму на мой сервер, так что я могу иметь необходимый base64/бинарный поделиться фото в Twitter, или я могу продолжать посылать ли фотографии от моего клиента до s3?

Затем каким-то образом, эффективно получить необходимую base64/двоичный файл на сервере (возможно, с помощью модуля запроса), так что я могу затем отправить изображение в твиттер?

ответ

2

Один довольно простой способ сделать это без изменения вашего клиентского кода целым рядом будет использовать S3 events. События S3 могут запускать функцию лямбда в AWS, которая может размещать изображение в твиттере. Вы можете использовать любую библиотеку внутри лямбда-функции для эффективной публикации в twitter. Не уверен, хотите ли вы использовать лямбда или придерживаться Heroku.

0

Если вы напрямую загружаете документы от клиента для загрузки на s3, вы подвергаете свои секретные/частные ключи AWS клиенту. Более безопасный способ загрузки изображений на узел и узел, в свою очередь, будет загружать его на S3. Рекомендуемый способ загрузки изображений на сервер узлов будет использовать данные multipart/form-data и использовать промежуточное программное обеспечение Multer.

Независимо от способа загрузки, вы можете использовать следующий код для обслуживания изображений в твиттере. Этот код использует модуль AWS-SDK.

var s3 = new AWS.S3(); 
    var filename = req.query.filename; 
    var params = { 
     Bucket: <bucketname>, 
     Key: <image path> 
    }; 

    var extension = filename.split('.')[1]; 
    if (extension == "jpg" || extension == "JPG" || extension == "jpeg" || extension == "JPEG") 
    { 
     res.setHeader('Content-Type', 'image'); 
    } 
    else if (extension == "png" || extension == "PNG") 
    { 
     res.setHeader('Content-Type', 'image/png'); 
    } 

    s3.getObject(params).createReadStream().pipe(res); 

Этот метод может масштабироваться с легкостью, как и любое другое экспресс-приложение.

+0

Вам не нужно выставлять свои учетные данные AWS, чтобы конечные пользователи могли напрямую загружать S3. Посмотрите «Загрузка объектов с использованием предварительно подписанных URL-адресов» – chris

+0

Да, мои учетные данные защищены на сервере. – NoobSter