9

W mojej aplikacji, wyślę zdjęcia bezpośrednio od klienta do S3, używając coś podobnego do tego zaproponował Heroku zalecenie: https://devcenter.heroku.com/articles/s3-upload-nodeJak przenieść obraz base64 z klienta na serwer lub pobrać plik binarny/base64 z s3?

Główną zaletą jest to, że oszczędza koszty serwera (jestem zakładając, ponieważ kawałki aren” • wysyłane na serwer za pomocą czegoś takiego jak dane formularza wieloczęściowego).

Jednak życzę, aby móc dzielić te obrazy na twitter również, co stanowi wymóg ten:

Zapewnienie Post to żądanie multipart/form-data. Prześlij surowy plik binarny (parametr multimedialny) pliku lub jego zawartość kodowaną64 (parametr media_data). Użyj binarne, jeśli to możliwe, ponieważ wyniki kodowania base64 w większej Rozmiary

Próbowałem wysyłania base64 potrzebnych stronie klienta s3 przesłać z powrotem do serwera, ale w zależności od rozmiaru zdjęć - I często pojawia się błąd, że jest zbyt duży, aby go odesłać.

TLDR

Czy muszę wysłać moje zdjęcia wykorzystując dane mulitparty/formularza wieloczęściowy do mojego serwera, więc mogę mieć potrzebną base64/binary aby udostępnić zdjęcie na Twitterze, czy mogę zachować wysyłania zdjęcia od mojego klienta do s3?

Potem jakoś skutecznie uzyskać potrzebne base64/binarnego na serwerze (ewentualnie przy użyciu modułu życzenie), więc można następnie przesłać obraz na Twitterze?

Odpowiedz

2

Jednym dość prostym sposobem na zrobienie tego bez zmiany kodu klienta byłoby użycie S3 events. Zdarzenia S3 mogą wywoływać funkcję lambda w AWS, która może publikować obraz na Twitterze. Możesz użyć dowolnej biblioteki wewnątrz funkcji lambda, aby efektywnie publikować posty na Twitterze. Nie jestem pewien, czy chcesz używać Lambdy, czy trzymać się Heroku.

0

Jeśli bezpośrednio przesyłasz dokumenty od klienta do przesłania do s3, ujawniasz swoje klucze tajne/prywatne AWS klientowi. Bardziej bezpiecznym sposobem byłoby przesłanie obrazów do węzła i węzła z kolei przesłanie go do S3. Zalecanym sposobem przesyłania obrazów na serwer węzłowy jest użycie wielostronicowych/formularzy danych i używanie oprogramowania pośredniego Multer.

Bez względu na metodę przesyłania, możesz użyć poniższego kodu do wyświetlania zdjęć na Twitterze. Ten kod używa modułu 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); 

Ta metoda może być skalowana w łatwy sposób, jak każda inna aplikacja ekspresowa.

+0

Nie musisz ujawniać swoich poświadczeń AWS, aby umożliwić użytkownikom końcowym przesyłanie bezpośrednio do S3. Wyszukaj "Przesyłanie obiektów przy użyciu wstępnie podpisanych adresów URL" – chris

+0

Tak, moje dane uwierzytelniające są zabezpieczone na serwerze. – NoobSter