我試圖通過API將文件上傳到遠程彈簧服務器,並且即使我已經將數據轉換爲數據,我也不斷收到不受支持的媒體類型錯誤(415)形成數據。將表單數據上傳到彈簧服務器時不受支持的媒體類型
這裏是明確HTTP POST請求:
var FormData = require('form-data');
var fs = require('fs');
var form = new FormData();
form.append('pid', params.pid);
form.append('deliveryAttachment', fs.createReadStream(params.deliveryAttachment.path));
var url = someDomain + '/proj/new/deliveryAttachment';
requestLib({
url: url,
method: "POST",
jar: getJar(),
form: form
},function (error, response, body){
console.log(body)
});
這裏參考了Java春控制器:
@RequestMapping(value = "proj/new/deliveryAttachment", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.TEXT_PLAIN_VALUE)
public String insertDeliveryAttachment(@RequestParam("pid") long pid,
@RequestParam("deliveryAttachment") MultipartFile file) {
try {
DeliveryAttachment a = new DeliveryAttachment(file.getOriginalFilename(), pid);
ps.insertDeliveryAttachment(a, file.getBytes());
return String.valueOf(a.id);
} catch (IOException e) {
return "-1";
}
}
這是形式的數據控制檯日誌:
和415響應:
{
"timestamp": 1494671395688,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'application/x-www-form-urlencoded' not supported",
"path": "/proj/new/deliveryAttachment"
}
--UPDATE--
好吧,我剛剛找到了讀出請求的文檔,如果你使用form
作爲數據的持有人,將數據視爲application/x-www-form-urlencoded
例如; request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ ... });
同時爲multipart/form-data
正確的關鍵是formData
例如; request.post({url:'http://service.com/upload', formData: formData}, function optionalCallback(err, httpResponse, body) { ... });
我試了一下,現在它給了我一個新的錯誤:
TypeError: Cannot read property 'name' of null at FormData._getContentDisposition
嗨,謝謝你的回覆。例如,如果我沒有辦法改變'insertDeliveryAttachment()'方法?是否有可能在請求中有明確的解決方法? – Growlithe
是的,那麼你必須用'multipart/form-data'發送你的請求。你可以使用[Multer](https://github.com/expressjs/multer)來實現這一點。 請查看此[鏈接](http://derpturkey.com/node-multipart-form-data-explained/)瞭解有關'application/x-www-form-urlencoded'和'multipart/form-data '。 – ansh
好的,謝謝我會檢查出來 – Growlithe