我尝试使用 angularjs 上传文件,但有一个问题是“当前请求不是多部分请求”,我几乎尝试了谷歌的每个解决方案,但没有解决我的问题,我希望有人可以回答我的问题,谢谢。
这是我的 springMVC 配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="5242880"></property>
</bean>
这是 html
<input type="file" id="file"/>
<button class="btn btn-primary" type="button" ng-click="uploadFile()">上传</button>
这是 Angular Controller
$scope.uploadFile = function () {
uploadService.uploadFile().success(function (response) {
if(response.success){
$scope.image_entity.url = response.message;
}else{
alert(response.message);
}
})
}
这是 angular.service
this.uploadFile = function () {
var formData = new FormData();
formData.append("file", file.files[0]); //文件上传框的name
return $http({
url: "/upload.do",
method: "post",
data: formData,
headers: {"Content-Type": undefined},
transformRequest: angular.identity
})
}
这是上传 Controller
@RequestMapping("/upload")
public ReturnResult upload(MultipartFile file){
String fullName = file.getOriginalFilename();
String extName = fullName.substring(fullName.lastIndexOf(".") + 1);
try {
FastDFSClient client = new FastDFSClient("classpath:config/fdfs_client.conf");
String fileId = client.uploadFile(file.getBytes(), extName);
String url = file_server_url + fileId;
return new ReturnResult(true, url);
} catch (Exception e) {
e.printStackTrace();
}
}
我看到谷歌浏览器发送
请求方式:POST
请求 header
内容类型:多部分/表单数据;边界=----WebKitFormBoundaryrzP8MUha8lcbDzdn
表单数据
------WebKitFormBoundaryrzP8MUha8lcbDzdn
内容处置:表单数据;名称="file";文件名=“1.jpg”
内容类型:图像/jpeg
------WebKitFormBoundaryrzP8MUha8lcbDzdn--
有问题吗?请帮助我。
最佳答案
我不确定根本原因。但我遇到了同样的问题,通过添加下面的代码解决了这个问题。尝试在您的配置中添加以下代码
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolverMine();
}
public static class CommonsMultipartResolverMine extends CommonsMultipartResolver {
@Override
public boolean isMultipart(HttpServletRequest request) {
final String header = request.getHeader("Content-Type");
if (header == null) {
return false;
}
return header.contains("multipart/form-data");
}
}
关于java - angularJs上传文件错误: The current request is not a multipart request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064492/