我正在尝试从具有来自不同输入名称的多个图像文件的提交表单上传文件。
例如,假设一个包含文本输入和文件输入的多部分表单,并且将所有具有相同名称的文件输入分组是不切实际的,例如images[]
<form ...>
some text inputs...
<input type='file' name='logo'/>
<input type='file' name='image-1'/>
<input type='file' name='image-2'/>
</form>
我想创建一个 express/sails 中间件来处理上传,所以我可以直接在我的控制器上访问它们。
如果我这样做(假设 req.file() 上的上传方法被承诺)
async function(req, res, next){
const maxTimeToBuffer = 9500
const dirname = '/some-upload-path'
const uploads = [
await req.file('logo').upload(dirname, maxTimeToBuffer)
await req.file('image-1').upload(dirname, maxTimeToBuffer)
await req.file('image-2').upload(dirname, maxTimeToBuffer)
]
// attaching the uploads to the request body ...
next()
}
这将引发错误:
EMAXBUFFER: An Upstream (
images-1 ) timed out before it was plugged into a receiver. It was still unused after waiting 9500ms. You can configure this timeout by changing the
maxTimeToBufferoption.
maxTimeToBuffer
即使在船长模块本身上,我是否将其增加到 30000 也没关系。
由于尝试以顺序方式处理每个文件无论如何都会引发错误,因此只要我知道输入字段名称,就可以并行处理它们。
async function(req, res, next){
const maxTimeToBuffer = 9500
const dirname = '/some-upload-path'
const uploads = await [
req.file('logo').upload(dirname, maxTimeToBuffer)
req.file('image-1').upload(dirname, maxTimeToBuffer)
req.file('image-2').upload(dirname, maxTimeToBuffer)
]
// attaching the uploads to the request body ...
next()
}
现在的问题是,我如何在最后一个片段上实现相同的目标,但事先不知道输入字段。像这样的东西
async function(req, res, next){
const maxTimeToBuffer = 9500
const dirname = '/some-upload-path'
const uploads = await req._fileparser.upstreams
// attaching the uploads to the request body ...
next()
}
问题是req._fileparser.upstreams
每次接收到新流时都会更新,并且只会在第一个图像被完全接收(顺序)之后发生,但如果我等待上游数组完成,我也会收到超时错误。
有什么解决方法吗?
我知道有很多东西要消化,如果您需要进一步澄清,请告诉我。任何想法表示赞赏