Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用多部分/表单数据对文件和某些字段进行修补_Javascript_Node.js_File Upload_Isomorphic Javascript - Fatal编程技术网

Javascript 使用多部分/表单数据对文件和某些字段进行修补

Javascript 使用多部分/表单数据对文件和某些字段进行修补,javascript,node.js,file-upload,isomorphic-javascript,Javascript,Node.js,File Upload,Isomorphic Javascript,我正在请求我的服务器修补一些常规表单字段,并上传一个图像 如果我单独在单独的请求中执行这些操作,那么所有操作都可以完美完成,但是如果表单数据和文件在同一个请求中,则任何操作都不起作用。这就是它目前的样子: const file = new FormData() file.append('uploadedFile', uploadedFile, uploadedFile.name) const patch = { name: 'Some Name', age: 18, file }

我正在请求我的服务器修补一些常规表单字段,并上传一个图像

如果我单独在单独的请求中执行这些操作,那么所有操作都可以完美完成,但是如果表单数据和文件在同一个请求中,则任何操作都不起作用。这就是它目前的样子:

const file = new FormData()
file.append('uploadedFile', uploadedFile, uploadedFile.name)
const patch = {
  name: 'Some Name',
  age: 18,
  file
}

return isomorphicFetch(`${MY_URL}`, {
    headers: {
      Accept: 'application/json'
    }
    method: 'PATCH',
    body: patch
  })
const multipartMiddleware = multer({ dest: 'uploads/' })
  app.use('/myendpoint',
    multipartMiddleware.single('uploadedFile'),
    (req, res, next) => {
      console.log('REQ', req)
      req.feathers.file = req.file
      next()
    }
  )
以下是我的中间件的外观:

const file = new FormData()
file.append('uploadedFile', uploadedFile, uploadedFile.name)
const patch = {
  name: 'Some Name',
  age: 18,
  file
}

return isomorphicFetch(`${MY_URL}`, {
    headers: {
      Accept: 'application/json'
    }
    method: 'PATCH',
    body: patch
  })
const multipartMiddleware = multer({ dest: 'uploads/' })
  app.use('/myendpoint',
    multipartMiddleware.single('uploadedFile'),
    (req, res, next) => {
      console.log('REQ', req)
      req.feathers.file = req.file
      next()
    }
  )
事情是这样的:如果我只把
file
作为补丁的主体,它工作得很好,我会像预期的那样在中间件中有一个req.file对象,但是,对于我在示例中显示的
PATCH
对象,我没有
req.file
对象。我做错了什么?我想保留我的文件以及姓名和年龄字段

请记住,如果我把它分成两个调用,它的工作原理与预期的一样。要使其正常工作,它当前看起来如下所示:

// This code is the only way I can make my patches work:

const file = new FormData()
file.append('uploadedFile', uploadedFile, uploadedFile.name)
const patch = {
  name: 'Some Name',
  age: 18,
}

return Promise.all([
    isomorphicFetch(`${MY_URL}`, {
       headers: {
         Accept: 'application/json'
       },
        method: 'PATCH',
        body: patch
      }),
    isomorphicFetch(`${MY_URL}`, {
       headers: {
        Accept: 'application/json'
       },
        method: 'PATCH',
        body: file
      })
  ])

更新:我试着通过邮递员来做这件事,事实上它确实起了作用。所以我现在更困惑了。

和邮递员一起试试。这可能是有关修补程序的服务器端配置问题。说得好。在邮递员身上,这一切都如期而至。问题不在客户方面吗?但这可能是什么配置呢?有什么想法吗?把邮递员的要求和你的比较一下。文件和表单数据之间可能缺少MIME头或其他内容。请与Postman一起尝试。这可能是有关修补程序的服务器端配置问题。说得好。在邮递员身上,这一切都如期而至。问题不在客户方面吗?但这可能是什么配置呢?有什么想法吗?把邮递员的要求和你的比较一下。文件和表单数据之间可能缺少MIME头或其他内容。