2013-07-04 39 views
20

Tôi đã thực hiện POC cho tải lên tệp đa phần còn lại của mùa xuân 3. Làm việc tốt. Nhưng khi tôi cố gắng tích hợp với ứng dụng của tôi, tôi đang gặp phải vấn đề.XUÂN PHỤC: Yêu cầu đã bị từ chối vì không có ranh giới nhiều phần được tìm thấy

Nó ném ngoại lệ sau đây:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is org.apache.commons.fileupload.FileUploadException: 
the request was rejected because no multipart boundary was found**" 

Xin vui lòng cho tôi biết nếu tôi sai ở bất kỳ phần nào của mã của tôi.

Đậu:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
<property name="order" value="1" /> 
<property name="mediaTypes"> 
<map> 
    <entry key="json" value="application/json" /> 
    <entry key="xml" value="application/xml" /> 
    <entry key="file" value="multipart/mixed" /> 
</map> 
</property> 
</bean> 
<!-- multipart resolver --> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- one of the properties available; the maximum file size in bytes --> 
    <property name="maxUploadSize" value="50000000" /> 
</bean> 

Bộ điều khiển:

@Controller 
public class MultipleFilesRecieve { 
    @RequestMapping (value = "/saveMultiple", method = RequestMethod.POST) 
     public String save(FileUploadForm uploadForm) { 
     List<MultipartFile> files = uploadForm.getFiles(); 
     List<String> fileNames = new ArrayList<String>(); 
     if (null != files && files.size() > 0) { 
      for (MultipartFile multipartFile : files) { 
       String fileName = multipartFile.getOriginalFilename(); 
       fileNames.add(fileName); 
      } 
     } 
     return "multifileSuccess"; 
    } 
} 

Trả lời

25

Vấn đề không phải là trong mã của bạn - đó là trong yêu cầu của bạn. Bạn đang thiếu ranh giới trong yêu cầu nhiều phần của mình. Vì nó nói trong specification:

Các Content-Type lĩnh vực cho các tổ chức nhiều phần dữ liệu đòi hỏi một tham số, "ranh giới", được sử dụng để xác định ranh giới đóng gói. Ranh giới đóng gói được định nghĩa là một dòng gồm toàn bộ hai ký tự dấu gạch ngang ("-", mã thập phân 45) theo sau là giá trị tham số biên từ trường tiêu đề Loại nội dung.

Thisthis bài đăng cũng sẽ hữu ích.

+0

hey @sermolaev, bạn có thể đưa ra một ví dụ về giá trị biên không? –

0

Bạn có đang sử dụng bất kỳ bộ lọc bảo mật nào không? Sự cố của tôi đã được giải quyết bằng cách xóa Chuỗi bộ lọc bảo mật. Từ này:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(this.springSecurityFilterChain).build(); 

này:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); 

Tôi mở một vấn đề mà tôi sẽ giải thích chi tiết: https://jira.spring.io/browse/SPR-12114

0

@sermolaev là đúng trong câu trả lời của mình.

Tôi muốn chia sẻ kinh nghiệm của mình liên quan đến vấn đề này. Tôi đã gặp phải vấn đề này trong Postman, nhưng tôi không thể hiểu nguyên nhân gốc rễ của nó trong một thời gian dài. Mẫu yêu cầu của tôi có vẻ đúng nguyên nhân Người đưa thư đã bao gồm boundary trong đó ...

Cuối cùng tôi đã phát hiện ra rằng khi bạn tự mình chỉ định Content-Type=multipart/form tiêu đề, nó sẽ tự động ghi đè lên tiêu đề do Người viết thêm tự động. Và điều này dẫn đến lỗi tương tự như lỗi của bạn. Giải pháp của tôi đơn giản như xóa tiêu đề Content-Type.

Các vấn đề liên quan