长话短说,不深入解释了,官方给的上传案例代码:

  1. private static final String IMGUR_CLIENT_ID = "...";
  2. private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
  3. private final OkHttpClient client = new OkHttpClient();
  4. public void run() throws Exception {
  5. // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
  6. RequestBody requestBody = new MultipartBuilder()
  7. .type(MultipartBuilder.FORM)
  8. .addPart(
  9. Headers.of("Content-Disposition", "form-data; name=\"title\""),
  10. RequestBody.create(null, "Square Logo"))
  11. .addPart(
  12. Headers.of("Content-Disposition", "form-data; name=\"image\""),
  13. RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
  14. .build();
  15. Request request = new Request.Builder()
  16. .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
  17. .url("https://api.imgur.com/3/image")
  18. .post(requestBody)
  19. .build();
  20. Response response = client.newCall(request).execute();
  21. if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
  22. System.out.println(response.body().string());
  23. }

上面这个代码上传文件在Java服务器端用spring boot的 MultiPart解析不到上传的文件,用Python Django,问题亦然。

找到了一个泡网同学的代码:

做了改动1:

  1. RequestBody requestBody = new MultipartBuilder()
  2. .type(MultipartBuilder.FORM)
  3. .addPart(
  4. Headers.of("Content-Disposition", "form-data; name=\"UserId\""),
  5. RequestBody.create(null, UserId))
  6. .addPart(
  7. Headers.of("Content-Disposition", "form-data; name=\"SecurityCode\""),
  8. RequestBody.create(null, SecurityCode))
  9. .addPart(
  10. Headers.of("Content-Disposition", "form-data; name=\"File\"; filename =\"avatar_upload.jpg\""),
  11. RequestBody.create(MediaType.parse("image/jpeg"), file))
  12. .build();

改为以上代码后,Django请求解析可以找到文件了,Spring boot的multipart任然找不到文件信息。

改动1的改动点是:文件的Header信息里面必须有上传文件的名字,当然这个名字其实是随便起的,一般后缀保持正确即可。

这个时候不得不再参考泡网同学的代码,做了修改2:

  1. RequestBody requestBody = new MultipartBuilder()
  2. .type(MultipartBuilder.FORM)
  3. .addPart(
  4. Headers.of("Content-Disposition", "form-data; name=\"UserId\""),
  5. RequestBody.create(null, UserId))
  6. .addPart(
  7. Headers.of("Content-Disposition", "form-data; name=\"SecurityCode\""),
  8. RequestBody.create(null, SecurityCode))
  9. .addPart(
  10. Headers.of("Content-Disposition", "form-data; name=\"File\"; filename =\"avatar_upload.jpg\""),
  11. RequestBody.create(MediaType.parse("application/octet-stream"), file))
  12. .build();

这回Spring Boot multipart 依旧找不到文件信息了,这回的改动点是把mime类型由图片类型"image/jpeg"改成了附件类型:

  1. "application/octet-stream"

最后借鉴StackOverFlow的某贴的代码:http://stackoverflow.com/questions/30707681/multipart-file-upload-with-okhttp-spring,

  1. RequestBody body = new MultipartBuilder()
  2. .addFormDataPart("qqfile", filename, RequestBody.create(MediaType.parse("media/type"), new File(filename)))
  3. .type(MultipartBuilder.FORM)
  4. .build();
  5. Request request = new Request.Builder()
  6. .url("/path/to/your/upload")
  7. .post(body)
  8. .build();
  9. OkHttpClient client = new OkHttpClient();
  10. Response response = client.newCall(request).execute();

因为这个帖子的topic就是解决Spring MultiPart的问题,最后终于可以上传了,修改点在于彻底修改了添加文件使用的函数接口,我在build gradle里面已经准备用Apache HttpClient了。

OkHttp有点坑爹啊。

参考:

https://github.com/square/okhttp/wiki/Recipes

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0824/3355.html

最新文章

  1. 【Solr】solr的增删改查
  2. OA系统如何使用考勤机数据
  3. Delphi 712操作word
  4. gcc常用的编译选项
  5. ASIHttpRequest:创建队列、下载请求、断点续传、解压缩
  6. C++关键字之const
  7. Linux回归篇-基础恶补
  8. 自动引用计数(ARC)
  9. Scala中的语言特性是如何实现的(3) -- Trait
  10. ubuntu linux 下 mysql 学习笔记
  11. [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式
  12. Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
  13. ELK 架构之 Elasticsearch 和 Kibana 安装配置
  14. 【转】Android总结篇系列:Activity Intent Flags及Task相关属性
  15. python文件流
  16. skipper http router 简单试用
  17. Win2012 R2虚拟机自激活(AVMA)技术
  18. PHP 操作redis 封装的类 转的
  19. docker 导入导出镜像
  20. 某些编辑器运行C程序闪退的解决办法

热门文章

  1. Web开发的发展史
  2. Uva - 1598 - Exchange
  3. pig的内置函数小总结(不全)
  4. 在maven中开发Spring需要的jar依赖
  5. pig读取部分列 (全部列中的少部分列)
  6. c++友元函数与友元类
  7. Java集合之Hashtable
  8. ORM对象关系映射之GreenDAO源码解析
  9. Obj-C中内存的管理一瞥
  10. PHP 与搜索蜘蛛