Spring REST不能从MultiPartHttpServletRequest获取文件
Spring REST not getting files from MultiPartHttpServletRequest
我正在尝试通过Angular 1.5上传文件到Spring REST端点。
我没有得到任何错误,因为multiPartRequest.getFileNames();
返回null。然而,我的JS POST似乎正确地通过了请求。
然而,我似乎无法解决它。我已经看了几个小时了,需要有人指出我错过的明显的东西。
任何帮助,建议都是感激的。
POST请求示例:
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:50188
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryIPlVKLnf1ZIQNPHV
Host:localhost:8080
Origin:http://127.0.0.1:49693
Referer:http://127.0.0.1:49693/test.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Request Payload
------WebKitFormBoundaryIPlVKLnf1ZIQNPHV
Content-Disposition: form-data; name="file"; filename="post-image1.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryIPlVKLnf1ZIQNPHV--
Name
我使用下面的HTML
<form enctype="multipart/form-data">
<input type="file" name="file" onchange="angular.element(this).scope().upload(this.files)"/>
<button type="submit">Upload</button>
<li ng-repeat="file in files">{{file.name}}</li>
</form>
使用以下JS
$scope.upload = function(files) {
var fd = new FormData();
//Take the first selected file
fd.append("file", files[0]);
$http.post('uploadURL', fd, {
withCredentials: true,
headers: {'Content-Type': undefined },
transformRequest: angular.identity
})
.success(function(d) {
console.log("Upload complete" +d);
})
};
和下面的REST端点
@RequestMapping(value="/upload", method=RequestMethod.POST)
public String upload (HttpServletResponse response, HttpServletRequest request) {
MultipartHttpServletRequest multiPartRequest = (MultipartHttpServletRequest) request;
Iterator<String> it = multiPartRequest.getFileNames();
while (it.hasNext()) {
MultipartFile multiPartFile = multiPartRequest.getFile(it.next());
String filename = multiPartFile.getOriginalFilename();
imageName = filename;
String path = new File("src/main/resources/images").getAbsolutePath() + "/" + filename;
try {
multiPartFile.transferTo(new File(path));
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
试着这样做
@RequestMapping(value="/upload", method=RequestMethod.POST)
public String upload(MultipartHttpServletRequest request,
HttpServletResponse response) {
(...)
我也有同样的问题,我通过将<button type="submit">Upload</button>
更改为<input type="submit">
来解决它
相关文章:
- Fin上传器直接上传到Azure Blob存储-在Javascript中获取文件uri
- Node js:如何获取文件签名标头而不是 mime 类型
- 如何在没有JQuery的情况下在Javascript中获取文件的内容
- 获取文件并从rest api下载
- 使用javascript获取文件输入
- JS获取文件内容
- 如何在使用javascript上传文件时获取文件源路径
- javascript如何从服务器获取文件夹中文件的url
- 如何使用javascript获取文件夹中的图像列表
- 应用程序脚本-自动从谷歌驱动器删除超过3天的文件-获取文件列表
- 如何在javascript中从ondrop事件中获取文件URL
- 如何使用javascript获取文件夹中的文件列表
- Javascript获取文件内容循环
- 通过Crypto.js获取文件的md5sum
- Cordova应用程序:如何获取文件的实际路径
- 如何使用PHP从我自己的网站上的Google Drive获取文件和文件夹列表
- 如何在所有父节点上获取文件夹图标,在所有子节点上获取文件夹加图标(左侧的图标)
- 我想要获取文件输入并将其保存到本地路径的Javascript
- 从Google Drive获取文件并隐藏到Blob
- drupal7获取文件路径