Tôi đang tạo POC cho dịch vụ Web RESTFUL bằng Spring 4.0. Nó hoạt động tốt nếu chúng ta chỉ chuyển chuỗi hoặc bất kỳ một kiểu dữ liệu cơ bản nào khác.Mùa xuân: Tải lên tệp Dịch vụ Web RESTFUL
@RequestMapping(value="/upload/file", method=RequestMapping.post)
public String uploadFile(@RequestParam("fileName", required=false) String fileName){
logger.info("initialization of object");
//----------------------------------------
System.out.Println("name of File : " + fileName);
//----------------------------------------
}
Điều này làm việc tốt. nhưng nếu tôi muốn vượt qua dòng byte hoặc đối tượng tệp để hoạt động, làm thế nào tôi có thể viết hàm này có các tham số này? và Làm thế nào tôi có thể viết Khách hàng có cung cấp luồng byte đi qua?
@RequestMapping(value="/upload/file", method=RequestMapping.post)
public String uploadFile(@RequestParam("file", required=false) byte [] fileName){
//---------------------
//
}
Tôi đã thử mã này nhưng nhận được 415 lỗi.
@RequestMapping(value = "/upload/file", method = RequestMethod.POST, consumes="multipart/form-data")
public @ResponseBody String uploadFileContentFromBytes(@RequestBody MultipartFormDataInput input, Model model) {
logger.info("Get Content. ");
//------------
}
Khách hàng Mã - Sử dụng apache HttpClient
private static void executeClient() {
HttpClient client = new DefaultHttpClient();
HttpPost postReqeust = new HttpPost(SERVER_URI + "/file");
try{
// Set Various Attributes
MultipartEntity multipartEntity = new MultipartEntity();
multipartEntity.addPart("fileType" , new StringBody("DOCX"));
FileBody fileBody = new FileBody(new File("D:\\demo.docx"), "application/octect-stream");
// prepare payload
multipartEntity.addPart("attachment", fileBody);
//Set to request body
postReqeust.setEntity(multipartEntity);
HttpResponse response = client.execute(postReqeust) ;
//Verify response if any
if (response != null)
{
System.out.println(response.getStatusLine().getStatusCode());
}
}
catch(Exception ex){
ex.printStackTrace();
}
Từ quan điểm máy chủ của xem, nó sẽ nhận được một 'MultipartFile'. Từ quan điểm HTTP, nó sẽ truyền 'multipart/form-data'. Và từ quan điểm của khách hàng ... nó sẽ phụ thuộc vào thư viện khách hàng ... –
IMHO, bạn không nên sử dụng chú thích '@ RequestBody' khi sử dụng' multipart/form-data', nhưng bạn nên xem xét Tham khảo mùa xuân Hướng dẫn sử dụng để xem cách cấu hình một ứng dụng để xử lý việc tải lên tệp. –
@serge: Tôi đã thử điều này nhưng phải đối mặt với lỗi 415. xin vui lòng đề nghị tôi liên kết tham khảo tốt. – Ronnie