Node.js nodejs向服务发送graphql上传文件时出现问题
我使用graphql upload将一个文件从一个web客户端上传到一个apollo express服务器,再上传到另一个服务器,该服务器需要一个PUT 使用文件请求Node.js nodejs向服务发送graphql上传文件时出现问题,node.js,express,apollo,Node.js,Express,Apollo,我使用graphql upload将一个文件从一个web客户端上传到一个apollo express服务器,再上传到另一个服务器,该服务器需要一个PUT 使用文件请求avatarImage 文件已正确进入uploadLogo()。我可以从express服务器保存并查看它。当我传递文件流时 要放置/化身,该端点不接收它。我已经测试过从文件系统直接向/avatar发送文件,可以确认端点是否正常工作 这是我的数据源文件,我在其中将文件的createReadStream附加到表单数据,并将其发送到fet
avatarImage
文件已正确进入uploadLogo()。我可以从express服务器保存并查看它。当我传递文件流时
要放置/化身,该端点不接收它。我已经测试过从文件系统直接向/avatar发送文件,可以确认端点是否正常工作
这是我的数据源文件,我在其中将文件的createReadStream附加到表单数据,并将其发送到fetch put中
MyAPI类扩展了RESTDataSource{
异步上传徽标(id,文件){
const{createReadStream,filename,mimetype}=wait file;
const stream=createReadStream();
const formData=new formData();
formData.append('avatarImage',流{
contentType:mimetype,
文件名
});
const headers=formData.getHeaders();
把这个还给我,放进去http://localhost:5000/avatar,formData,{headers});
}
}
将表单数据流发送到此/avatar端点时,我遗漏了什么?我也面临着这个问题,不确定这是否是解决问题的正确方法。无法使用
graphql upload
找到要从graphql server express
上载到另一个服务的任何引用/文档。()
实际上,我必须将该文件作为临时文件写入文件系统,并将文件系统读取流传递给表单数据,以使其正常工作。没有临时文件,不知何故标题是不正确的,在上游看来,内容长度是1
或0
或某个奇怪的值
这就是我所做的:
// this is a method on our data-source-rest
async uploadSomeFile({ invoices }: { invoices: Promise<FileUpload> }) {
const { createReadStream: apolloFileStream, mimetype, filename } = await invoices;
const tempFilename = `/tmp/${Date.now()}/${filename}`;
const stream = apolloFileStream();
const wstream = createWriteStream(tempFilename);
await new Promise((resolve, reject) => {
stream
.pipe(wstream)
.on('finish', () => resolve())
.on('error', () => reject());
});
const rstream = createReadStream(tempFilename);
const data = new FormData();
data.append('file', rstream);
return this.post(`/transactions/upload`, data);
}
//这是数据源rest上的一个方法
异步上传文件({invoices}:{invoices:Promise}){
const{createReadStream:apolloFileStream,mimetype,filename}=wait发票;
const tempFilename=`/tmp/${Date.now()}/${filename}`;
const stream=apolloFileStream();
const wstream=createWriteStream(tempFilename);
等待新的承诺((决定,拒绝)=>{
流动
.管道(wstream)
.on('finish',()=>resolve())
.on('错误',()=>拒绝());
});
const rstream=createReadStream(tempFilename);
const data=新表单数据();
data.append('file',rstream);
返回此.post(`/transactions/upload`,data);
}