Javascript 使用nodeJS从AmazonS3读取文件,并使用axios将其发布到另一台服务器
我正在尝试从AmazonS3读取一个文件(图像),并使用Javascript 使用nodeJS从AmazonS3读取文件,并使用axios将其发布到另一台服务器,javascript,node.js,amazon-s3,axios,aws-sdk,Javascript,Node.js,Amazon S3,Axios,Aws Sdk,我正在尝试从AmazonS3读取一个文件(图像),并使用multipart/form将其发布到另一台服务器 let imageParams = { Bucket: 'my-bucket', Key: 'imageName.jpg' }; let formData = new FormData(); formData.append('file', s3.getObject(imageParams).createReadStream()); let apiResponse =
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
})
})
}))
你用什么做api?基本上,什么是为
fileUpload
endpoint供电?这不是我的API,当我尝试用postman上传文件时,它工作得很好……您是否尝试过删除多部分头文件,因为我可以运行您的代码而不会对模拟API产生任何问题。如果您指的是API.post,它就是axios。module.exports.api=axios.default.create({baseURL:'',});已经尝试过了,它返回了相同的错误:/it返回了500我应该这样设置参数吗?返回API({method:'post',url:/upload',headers:headers,params:{id:ticketId,token:process.env.API_token},data:formData})错误:请求失败,状态代码为500,位于createError(C:\node_modules\axios\lib\core\createError.js:16:15),位于结算(C:\node_modules\axios\lib\core\solate.js:17:12)在IncomingMessage.EventEmitter.emit(events.js:215:7)在IncomingMessage.EventEmitter.emit(domain.js:475:20)在endReadableNT(_stream\u readable.js:1184:12)在processtick和拒绝(内部/进程/任务队列.js:80:21)在IncomingMessage.handleStreamEnd(C:\node\u modules\axios\lib\adapters\http.js:236:11)它和邮递员一起工作。我有3个查询参数:token、id和actionId。标题中的值为:Content-type:multipart/form-data,主体是表单数据,只有一个值是文件。是,设置参数。您附加的调用堆栈是axios的调用堆栈,而不是来自服务器。来自服务器的错误位于错误的数据属性中。