首页 > 解决方案 > FilePond Retry 忽略 Upload-Offset

问题描述

我正在使用filepond来处理我的 Nuxt-Frontend 和我的 Express-Backend 之间的上传。如果没有发生错误,一切正常。但是,如果我在某些补丁请求之后手动触发错误,然后使用重试按钮 Filepond 开始重新上传文件,而不是从失败的地方重新上传文件。

该文档指出以下内容:

如果在 chunkRetryDelays 中设置的重试次数后其中一个块无法上传,则用户可以选择重试上传。

由于 FilePond 记住了先前的传输 id,因此该过程现在从一个 HEAD 请求开始,该请求伴随着 URL 中的传输 id (12345)。

服务器响应 Upload-Offset 设置为下一个预期的块偏移量(以字节为单位)。

FilePond 将所有具有较低偏移量的块标记为已完成,并继续在请求的偏移量处上传块。

在此处输入图像描述

正如您在图片中看到的,我在失败发生后在响应中的 Header 中设置了 Upload-Offset。但是 Filepond 似乎忽略了这个偏移量并重新开始,如下图所示。

在此处输入图像描述

理论上,Filepond 应该识别 Offset 并从指定的 Offset 开始发送 Chunk。

在前端文件池中,当前是这样设置的:

 <template>
  <v-layout>
    <v-flex class="text-center">
       <file-pond
        name="file"
        ref="pond"
        chunkUploads="true"
        chunkSize="500000"
        class-name="my-pond"
        label-idle="Drop files here..."
        allow-multiple="true"
        v-bind:files="myFiles"
        :server="server"
        v-on:init="handleFilePondInit"
        v-on:error="error"/>
    </v-flex>
  </v-layout>
</template>

<script>
// Import FilePond
import vueFilePond from 'vue-filepond';


// Import styles
import 'filepond/dist/filepond.min.css';

// Create FilePond component
const FilePond = vueFilePond();

import axios from "~/plugins/axios";

export default {
  components: {
    FilePond,
  },
  data: () => ({
    server: {
      url: "http://localhost:3001/api/filepond/",
      process: "process",
      patch: "patch?id="
    },
    myFiles: [],
  }),
  methods: {
    handleFilePondInit: function() {
            console.log('FilePond has initialized');

            // example of instance method call on pond reference
            this.$refs.pond.getFiles();
    },
    error: (err) => {
        console.log(err);
    }
  }
};
</script>

标签: expressvue.jsnuxt.jsfilepond

解决方案


推荐阅读