2015-06-08 3 views
4

Недавно я переключился на OkHttp. После переключения код ниже загружает.Загрузка многостраничного файла с помощью OkHttp + Spring

RequestBody requestBody = new MultipartBuilder() 
         .type(MultipartBuilder.FORM) 
         .addPart(
           Headers.of("Content-Disposition", "form-data; name=\"qqfile\""), 
           RequestBody.create(
             MediaType.parse(filename), 
             new File(filename))) 
         .build(); 

Если сравнивать изображения, то второе изображение имеет multipartFilessize = 0. Он должен быть size = 1. Как правильно заполнить multipartHttpRequest, используя OkHttp, чтобы заставить сервер принимать успешную загрузку?

Correct In-Correct

контроллер код

import org.apache.commons.fileupload.servlet.ServletFileUpload; 

import org.springframework.http.MediaType; 
import org.springframework.web.multipart.MultipartFile; 
import org.springframework.web.multipart.MultipartHttpServletRequest; 
import org.springframework.web.util.WebUtils; 

@RequestMapping (
     method = RequestMethod.POST, 
     value = "/upload", 
     produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8" 
) 
public String upload(
     HttpServletRequest request, 
     HttpServletResponse response 
) throws IOException { 
    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    if (isMultipart) { 
     MultipartHttpServletRequest multipartHttpRequest = 
     WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class); 

     final List<MultipartFile> files = multipartHttpRequest.getFiles("qqfile"); 

     if (files.isEmpty()) { 
      LOG.error("qqfile name missing in request or no file uploaded"); 
      return some error code here 
     } 

     MultipartFile multipartFile = files.iterator().next(); 
     //process file code below 
    } 
    return failure; 
} 
+0

Не могли бы вы показать ваш контроллер? –

+0

@MarcusHenrique Я добавил код контроллера. –

ответ

3

Вы можете получить MultipartFile проще:

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public String upload(@RequestParam("qqfile") MultipartFile file) throws IOException { 
    if (!file.isEmpty()) { 
     // ... 
    } 
    return "failure"; 
} 

А потом, с OkHttp:

RequestBody body = new MultipartBuilder() 
    .addFormDataPart("qqfile", filename, RequestBody.create(MediaType.parse("media/type"), new File(filename))) 
    .type(MultipartBuilder.FORM) 
    .build(); 

Request request = new Request.Builder() 
    .url("/path/to/your/upload") 
    .post(body) 
    .build(); 

OkHttpClient client = new OkHttpClient(); 
Response response = client.newCall(request).execute(); 

Это работало хорошо для меня.

Будьте осторожны с MediaType.parse (имя файла), вы должны передать действительный тип, как текст/обычный, приложения/JSON, приложения/XML ...

Смежные вопросы