英文:
Use formidable's PersistentFile with FormData and fetch
问题
我正在运行一个使用Nuxt3/Nitro的小型API。它的工作方式类似于我的Web应用程序和我的常规API之间的代理。因此,我的Nitro API接收文件,我使用Formidable从请求中读取它们,并将它们保存在Formidable的PersistentFile
实例中。
现在我需要将这些文件放入常规的formData.append
语法中,以便我可以使用fetch API将包含这些文件的formData发送到服务器。
我该如何做到这一点?如果我只是像这样放置文件:formData.append('name', persistentFileInstance);
,它会说它不被识别为文件。所以我有点不知道应该如何转换这个实例。
这是我的文件的console.log输出:
addImage.post.ts 被调用,内容如下:
{
photo: [
PersistentFile {
_events: [Object: null prototype],
_eventsCount: 1,
_maxListeners: undefined,
lastModifiedDate: 2023-01-07T22:33:43.127Z,
filepath: '/tmp/0d0c99ee783bfe790d86da001',
newFilename: '0d0c99ee783bfe790d86da001',
originalFilename: 'Screenshot from 2023-01-04 09-04-32.png',
mimetype: 'image/png',
hashAlgorithm: false,
size: 110657,
_writeStream: [WriteStream],
hash: null,
[Symbol(kCapture)]: false
}
]
}
英文:
I'm running a small api with nuxt3/nitro. It works like a proxy between my webapp and my regular api. So my nitro api receives files, I read them from the request using Formidable, and they get saved in formidable's PersistentFile
instances.
Now I need to put these files in a regular formData.append syntax, so I can use the fetch api to send a post containing these files in the formData.
How can I do this? If I just put the file like formData.append('name', persistentFileInstance);
it says it isn't recognized as a file. So I'm kinda lost on how should I transform this instance.
Here's a console.log of my file:
addImage.post.ts called with this content { 19:33:43
photo: [
PersistentFile {
_events: [Object: null prototype],
_eventsCount: 1,
_maxListeners: undefined,
lastModifiedDate: 2023-01-07T22:33:43.127Z,
filepath: '/tmp/0d0c99ee783bfe790d86da001',
newFilename: '0d0c99ee783bfe790d86da001',
originalFilename: 'Screenshot from 2023-01-04 09-04-32.png',
mimetype: 'image/png',
hashAlgorithm: false,
size: 110657,
_writeStream: [WriteStream],
hash: null,
[Symbol(kCapture)]: false
}
]
}
答案1
得分: 2
我通过从本地文件路径创建缓冲区,然后创建 Blob 实例,然后将 Blob 添加到 FormData 来修复了它。这是我的代码:
import { readFiles } from 'h3-formidable';
import { Blob } from "buffer";
import fs from "fs";
//...
let buffer = fs.readFileSync(thisPhoto.filepath);
let blob = new Blob([buffer]);
var form = new FormData(); // 这是默认的 FormData 实例,而不是自定义包
form.append('photo', blob);
英文:
I fixed it by creating a buffer from the local file path, then a Blob instance, then appending the Blob to the FormData. Here's my code:
import { readFiles } from 'h3-formidable'
import { Blob } from "buffer";
import fs from "fs";
//...
let buffer = fs.readFileSync(thisPhoto.filepath);
let blob = new Blob([buffer]);
var form = new FormData(); //this is default FormData instance, not the custom package
form.append('photo', blob);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论