android – 使用OkHttp Spring上传多部分文件

我最近切换到了OkHttp.切换后,下面的代码执行上传.

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();

如果比较图像,第二个图像的multipartfiles大小= 0.它应该是size = 1.如何使用OkHttp正确填充multipartHttpRequest以使服务器接受成功上传

控制器代码

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;
}

解决方法

您可以更轻松地获得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(filename),你必须传递一个有效的类型,如text / plain,application / json,application / xml …

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...