【问题标题】:unsupported Media type 415 for file upload with Spring mvc restcontroller and angularjs不支持使用 Spring mvc restcontroller 和 angularjs 上传文件的媒体类型 415
【发布时间】:2016-08-03 15:34:38
【问题描述】:

当我试图点击包含文件上传详细信息的 angularjs $http.post 时,它给了我不受支持的媒体类型。我正在使用后端 spring mvc 休息控制器。以下是代码sn-p。

    <ul><li><h4>Document Type</h4>
    <select name="docType"  ng-model="docType" name="docType">
    <option value="Report1">Report1</option> 
    <option value="Report2">Report2</option>
    </select>
    <input type="file" ng-model-instant id="fileToUpload" onchange="angular.element(this).scope().setFiles(this)" />
    </li>
    <li><h4>Comments:</h4><textarea></textarea></li>
    <li><button  class="btn-panel-blue"  type="submit">Saves</button></li>
    <li><a href="#/searchProjects">Cancel</a></li>
    </ul>

angular.module('app')
.controller('prjCntrl', function ($scope,projectService, sharedService, $location, $log, $http, $state) {
	$scope.setFiles = function(element) {
	    $scope.$apply(function(scope) {
	        $scope.uploadedFile ;
	        for (var i = 0; i < element.files.length; i++) {
	        	$scope.uploadedFile=element.files[i];
	        	break;
	        }
	      });
	    };
 $scope.updateProject = function updateProject()
 {
	 var formData=new FormData();
	 formData.append('docType',angular.toJson($scope.projectData.docType,true));
	 formData.append("uploadFile",$scope.uploadedFile);
	 var url=baseURL + '/updateProject.do';
	 $http.post(url, formData, { transformRequest: angular.identity, headers: {'Content-Type': undefined} })
        .success(function(){alert("success");})
        .error(function(){ });
 };
}
);
这是我的java代码。


    @RestController
    @MultipartConfig(fileSizeThreshold=1024*1024*10,  
    maxFileSize=1024*1024*50,          
    maxRequestSize=1024*1024*100)
    public class ProjectController {
    @RequestMapping(value="/updateProject.do",method = RequestMethod.POST,headers ="Accept=multipart/form-data", consumes={"multipart/form-data"}, produces={"text/plain;charset=UTF-8"})
        public @ResponseBody String updateProjectDetails(HttpServletRequest request, HttpServletResponse response,  @RequestBody ProjectForm command)
        {
            contractProjectsService.saveProject(command);
            return "success";
        }
    }

这是来自 chrome 头/请求和响应数据的头信息



    **General:**
    Request URL:http://localhost:9090/SpringMVCAngularJS/updateProject.do
    Request Method:POST
    Status Code:415 Unsupported Media Type
    Remote Address:[::1]:9090
    ***Response Headers:***
    view source
    Content-Language:en
    Content-Length:1048
    Content-Type:text/html;charset=utf-8
    Date:Wed, 03 Aug 2016 15:06:05 GMT
    Server:Apache-Coyote/1.1
    ***Request Headers:***
    view source
    Accept:application/json, text/plain, */*
    Accept-Encoding:gzip, deflate
    Accept-Language:en-US,en;q=0.8
    Authorization:Basic YmVlcDpib29w
    Connection:keep-alive
    Content-Length:1011
    Content-Type:multipart/form-data; boundary=---- WebKitFormBoundaryagdf0LOX4AuXY6SI
    Cookie:JSESSIONID=96052E348C6E52F53A594A179E65DE6D
    Host:localhost:9090
    Origin:http://localhost:9090
    Referer:http://localhost:9090/SpringMVCAngularJS/index.html
    User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

请帮我解决。

【问题讨论】:

  • 这与 ng-file-upload 无关。

标签: angularjs spring-mvc ng-file-upload media-type


【解决方案1】:

尝试在请求头中发送评论或其他数据并将文件发送到控制器,在控制器中使用“@Requestpart”接受文件。使用下面的代码作为参考..

@Produces("text/plain;charset=UTF-8")
    @RequestMapping(value = "/fileUpload/", method = RequestMethod.POST)
    public @ResponseBody ResponseCodeModel fileUpload(@RequestPart MultipartFile file,
            @RequestHeader(value = "comment") String comment,
            )

【讨论】:

  • 嗨,还是一样的结果。即将出现不支持的媒体类型错误。
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 2015-07-21
  • 2013-08-08
  • 1970-01-01
  • 2017-06-21
  • 2023-03-04
  • 2017-05-20
  • 1970-01-01
相关资源
最近更新 更多