如何在JavaScript中将此cURL命令转换为XMLHttpRequest?

时间:2017-05-21 14:02:55

标签: javascript curl xmlhttprequest multipart

我试图在JS中发送带有multipart / mixed内容类型的请求。这是我正在使用的cURL命令,它可以工作:

curl -k -i -X POST -H "Content-Type: multipart/mixed" -H "Timestamp: 2017-
04-20'T'13:15:05" -H "AuthToken: A834F35B21E7BE50067B3E352BED" -F 
"config=@request.json;type=application/json" -F "logo=@random2.gif" 
https://pmdev.****.com:8443/core/admin/hospital/26/department/63

以下是我尝试在JS中使用的代码,但它不起作用:

let blob = new Blob([ JSON.stringify(config) ], {type:
'application/json'})

var formData = new FormData()
formData.append('config', blob)
formData.append('logo', logo)

var request = new XMLHttpRequest()
request.open(method, url)
request.setRequestHeader('Content-type', 'multipart/mixed')
request.setRequestHeader('AuthToken', authToken)
request.setRequestHeader('Timestamp', getTimestamp())
request.send(formData)

如何修复此代码?

2 个答案:

答案 0 :(得分:0)

let blob = new Blob([JSON.stringify(config)], {type: 'application/json'});
let formData = new FormData();
formData.append('config',blob);
formData.append('logo',logo);
let request = new XMLHttpRequest();
request.open('POST',url);
request.setRequestHeader('content-type', 'application/json');
request.send(formData);

//我认为您错误地引用了表单数据的内容,我删除了//引用它们。你应该使用'POST'作为你的方法,因为它会自动设置//你的formData(非常肯定,它似乎是一个很远的//断言)。另外,我改变了所有类型为json。

//这个页面上有所有的formData方法:这样你就可以获得附在POST上的//信息 https://developer.mozilla.org/en-US/docs/Web/API/FormData

答案 1 :(得分:0)

最后我设法通过使用axios来解决这个问题, 这是我用过的代码

  let formData = new FormData()
  let blob = new Blob([ JSON.stringify(config) ], {type: 'application/json'})
  formData.append('config', blob)
  formData.append('logo', logo)

  axios.post(url, formData, {
    headers: {
      'AuthToken' : authToken,
      'Timestamp' : getTimestamp(),
      'Content-type': 'multipart/mixed'
    }
  })