【问题标题】:"Error: MultipartParser.end(): stream ended unexpectedly" error when uploading a file上传文件时出现“错误:MultipartParser.end():流意外结束”错误
【发布时间】:2021-05-28 10:46:47
【问题描述】:

我正在使用form-data 从缓冲区上传文件。在服务器端,我使用formidable 来解析文件数据。我在服务器上不断收到这样的错误:

Error: MultipartParser.end(): stream ended unexpectedly: state = START

Error: MultipartParser.end(): stream ended unexpectedly: state = PART_DATA

我不确定这是表单数据的问题还是强大的问题。我找到了很多解决方案(主要涉及不手动设置 Content-Type 标头)。但是,我找不到可以为我解决问题的方法。我最终弄清楚了一些事情,所以发布以回答。

我在开发 Strapi 上传提供程序时遇到了这个问题。 Strapi 提供有关需要上传到服务的文件的信息。文件内容作为缓冲区提供(出于某种原因)。这是我收到错误时的代码(稍作修改):

const form = new FormData()
form.append('file', Readable.from(file.buffer))
form.append('name', file.name)
form.append('hash', file.hash)
form.append('mime', file.mime)
form.on('error', () => abortController.abort())

return fetch(url, {
    method: 'post',
    body: form,
    signal: abortController.signal,
}))

【问题讨论】:

    标签: node.js express fetch-api


    【解决方案1】:

    同样,我不确定这是表单数据的问题还是强大的问题,但如果我向表单数据提供 filenameknownLength,问题就会消失。这是我最终代码的样子(稍作修改):

    const fileStream = Readable.from(file.buffer)
    const fileSize = Buffer.byteLength(file.buffer)
    
    const abortController = new AbortController()
    
    const form = new FormData()
    form.append('file', fileStream, {filename: file.name, knownLength: fileSize})
    form.append('name', file.name)
    form.append('hash', file.hash)
    form.append('mime', file.mime)
    form.on('error', () => abortController.abort())
    
    return fetch(url, {
        method: 'post',
        body: form,
        signal: abortController.signal,
    }))
    

    我已经尝试记录 form.on('error') 结果,但我什么也没得到(它没有中止)。

    我尝试设置 filename 并得到同样的错误。

    我试过设置knownLength。文件上传但它是空的(至少,强大的认为它是)。它必须需要文件名才能正确解析文件?

    这可能是form-data 未正确读取输入流或未正确写入输出流的问题(我确实注意到在服务器上查看文件数据被截断的原始表单数据)或 @987654327 @ 没有正确读取文件数据。设置filenameknownLength 可以绕过这个问题。

    更新:这可能已在较新版本的form-data 中得到部分修复。我更新了包,不再需要设置knownLength。我仍然需要设置filename。没有它,服务器认为文件是空的。

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2014-03-19
      • 1970-01-01
      • 2013-08-10
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 2018-06-14
      相关资源
      最近更新 更多