以前,我使用rest API将文件上传到服务器。我有输入类型文件,并且正在使用该API将表单数据发送到服务器。一切正常,但现在我必须使用graphql突变。我们有一个运行apollo服务器的应用程序,在该应用程序中,我使用相同的API上载了我们的图像,但似乎文件对象的格式与其余API期望的格式不同。所以我的问题是我们如何才能像在浏览器中通过nodejs创建相同的文件对象一样。
我们正在使用RESTDataSource
在graphql应用程序中进行HTTP调用
我的模式
type Mutation {
uploadFile(file: Upload!): Boolean!
}
这是我的解析器
import { createWriteStream, createReadStream } from 'fs';
import FormData from 'form-data';
async uploadFile(file: any): Promise<any> {
const url = new URL(`https://dev.dummber.com/portal/file/v1/uploadFile`);
const { createReadStream: apolloFileStream, mimetype, filename } = await file;
const tempFilename = `${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 formData = new FormData();
formData.append('uploadingFile', rstream);
const response = await this.post(url.toString(),
{
data: formData
}
, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
return true
}