我想将对象列表发送到我的 sveltekit 服务器。 Afaik,表单操作是正确的选择。
我有一个看起来像这样的对象列表
export interface ExampleObjectWithFile {
id: string,
file: File, // File type is https://developer.mozilla.org/en-US/docs/Web/API/File
name: string,
}
我不明白的是你应该如何发送文件作为表单数据的一部分(如果我只发送文件,它就有效)我的第一个想法是我需要更改的内容类型对象的文件部分,但我不知道如何做到这一点。
因此,我希望接下来的工作是分别上传文件,如下所示:
// Intercept the formAction call to add extra data
async function onSubmit(input) {
input.formData.append('parts', JSON.stringify($parts, skipFileReplacer));
for (let part of $parts) {
input.formData.append('files', part.file);
}
}
当我这样做时,我只是在服务器上得到一个空对象。
值得一提的是,我正在使用 https://superforms.rocks/ 进行验证。
所以我的问题是:
更新:我发现使用
await event.request.formData()).getAll("file")
在我的服务器上实际上给了我一个文件列表,似乎问题出在 sveltekit 超级形式解析这个文件列表上。
SvelteKit 的 Superforms 尚不支持文件。
参见: https://superforms.rocks/faq#how-to-handle-file-uploads
解决方案是手动提取formData:
const formData = await request.formData();
const files = formData.getAll("file") as File[];