React、Redux、Filepond

rg8*_*g88 1 javascript file-upload reactjs filepond

我的问题......我如何使用 FilePond 上传文件,但是点击,而不是像开箱即用那样自动上传?此外,因为我需要对这些图像执行许多其他操作(例如在上传之前显示它们以供查看),并且因为我需要将其他数据添加到发送的 FormData(以及向 Redux 发送操作)。

通常我会创建一个 FormObject 将文件和其他值附加到它,然后再将它发布到某个端点(需要任何自定义标头)。然而,当我检查 FilePond 实例时,似乎我唯一可以访问的是一个 blob ......而不是实际文件。这是准确的吗?我是否需要遵循一些特殊的 FilePond 特定技术才能使文件上传工作?

FilePond 的文档有一个名为“server”的自定义配置值,它在更高级的示例中似乎可以访问实际文件,所以这是必须完成的方式吗?我不能只是抓取文件(从我目前在 FilePond 实例上看不到的地方)并将它们附加到一个对象以用于我的正常“服务”?

任何提示表示赞赏。在 React 应用程序中,我想在附加其他表单数据和设置标​​头(理想情况下使用 Axios)并将这些文件发布到 API 后上传可变数量的文件 onclick。

他们的文档中的示例使用了如下道具:

server="/api"
Run Code Online (Sandbox Code Playgroud)

我想要类似(假代码)的东西:

server={submitImages} <-- this should only happen onclick of some button
Run Code Online (Sandbox Code Playgroud)

在哪里:

submitImages = (fieldName, file) => {
  const formData = new FormData()
  formData.append(fieldName, file, file.name)
  formData.append('foo', this.props.foo)
  const docuploadresult = this.props.uploadDocs(formData) <-- a service that lives elsewhere and actually does the POST
  docuploadresult.then(result => {
        // success
      }, error => {
        // error
      })
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我不明白为什么这需要在一些特殊的配置对象中发生,例如server,不知道如何在点击时实现这一点,在任何地方都看不到实际文件。

可能是我多虑了?

Rik*_*Rik 6

FilePond 提供了该server属性,因此它可以为您处理上传。但这不是必需的,您可以使用getFiles它轻松请求FileFilePond 中的所有文件项(和对象)并自己上传它们。

将您自己的提交按钮添加到表单并使用submitImages下面的提交文件。

submitImages = (fieldName) => {

  const formData = new FormData();

  this.filepondRef.getFiles()
    .map(fileItem => fileItem.file)
    .forEach(file => {
      formData.append(fieldName, file, file.name);
    });

  // upload here

}
Run Code Online (Sandbox Code Playgroud)

如果要显示图像预览,可以添加图像预览插件。 https://pqina.nl/filepond/docs/patterns/plugins/image-preview/