簡體   English   中英

使用 nodeJS 從 Amazon S3 讀取文件並使用 axios 將其發布到另一台服務器

[英]Read file from Amazon S3 with nodeJS and post it to another server with axios

我試圖從亞馬遜 S3 讀取文件(圖像)並將其發布到另一台帶有multipart/form服務器。

  let imageParams = { Bucket: 'my-bucket', Key: 'imageName.jpg' };

  let formData = new FormData();

  formData.append('file', s3.getObject(imageParams).createReadStream());

  let apiResponse = await api.post("/fileUpload", formData,
    { params: { token: process.env.API_TOKEN } }, 
    { headers: {'Content-Type': 'multipart/form-data' } } );

但我沒有管理它工作,它返回給我:

Error: Request failed with status code 415

也許我誤解了createReadStream()是如何工作的?

使用 concat 對流進行管道傳輸。 否則表單數據只發送流的第一個塊,服務器不知道如何處理它。

例如

const axios = require('axios');
const {S3} = require('aws-sdk');
const FormData = require('form-data');
const s3 = new S3();
var concat = require('concat-stream')

const api = axios.default.create({
    baseURL: 'http://example.com',

})

const readStream = s3.getObject({Bucket: 'bucket', Key: 'file'}).createReadStream();
readStream.pipe(concat(filebuffer => {
    const formData = new FormData();
    formData.append('file', filebuffer);
    formData.getLength((err, length) => {
        console.log(length)
        const headers = formData.getHeaders({'content-length': length})
        console.log({headers})
        return api({
            method: 'post',
            url: "/upload",
            headers: headers,
            data: formData
        })
    })

}))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM