SvelteKit 表单操作,如何附加包含文件的对象列表?

问题描述 投票:0回答:1

我想将对象列表发送到我的 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/ 进行验证。

所以我的问题是:

  1. 您可以将文件作为 FormData 的一部分发送吗?
  2. 如何将文件列表发送到服务器并保持与对象的关系?

更新:我发现使用

await event.request.formData()).getAll("file")

在我的服务器上实际上给了我一个文件列表,似乎问题出在 sveltekit 超级形式解析这个文件列表上。

forms file sveltekit form-data octet-stream
1个回答
0
投票

SvelteKit 的 Superforms 尚不支持文件。

参见: https://superforms.rocks/faq#how-to-handle-file-uploads

解决方案是手动提取formData:

const formData = await request.formData();
const files = formData.getAll("file") as File[];
© www.soinside.com 2019 - 2024. All rights reserved.