OkHttp上传文件,服务器端请求解析找不到文件信息的问题
长话短说,不深入解释了,官方给的上传案例代码:
- private static final String IMGUR_CLIENT_ID = "...";
- private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
- private final OkHttpClient client = new OkHttpClient();
- public void run() throws Exception {
- // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
- RequestBody requestBody = new MultipartBuilder()
- .type(MultipartBuilder.FORM)
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"title\""),
- RequestBody.create(null, "Square Logo"))
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"image\""),
- RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
- .build();
- Request request = new Request.Builder()
- .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
- .url("https://api.imgur.com/3/image")
- .post(requestBody)
- .build();
- Response response = client.newCall(request).execute();
- if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
- System.out.println(response.body().string());
- }
上面这个代码上传文件在Java服务器端用spring boot的 MultiPart解析不到上传的文件,用Python Django,问题亦然。
找到了一个泡网同学的代码:
做了改动1:
- RequestBody requestBody = new MultipartBuilder()
- .type(MultipartBuilder.FORM)
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"UserId\""),
- RequestBody.create(null, UserId))
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"SecurityCode\""),
- RequestBody.create(null, SecurityCode))
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"File\"; filename =\"avatar_upload.jpg\""),
- RequestBody.create(MediaType.parse("image/jpeg"), file))
- .build();
改为以上代码后,Django请求解析可以找到文件了,Spring boot的multipart任然找不到文件信息。
改动1的改动点是:文件的Header信息里面必须有上传文件的名字,当然这个名字其实是随便起的,一般后缀保持正确即可。
这个时候不得不再参考泡网同学的代码,做了修改2:
- RequestBody requestBody = new MultipartBuilder()
- .type(MultipartBuilder.FORM)
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"UserId\""),
- RequestBody.create(null, UserId))
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"SecurityCode\""),
- RequestBody.create(null, SecurityCode))
- .addPart(
- Headers.of("Content-Disposition", "form-data; name=\"File\"; filename =\"avatar_upload.jpg\""),
- RequestBody.create(MediaType.parse("application/octet-stream"), file))
- .build();
这回Spring Boot multipart 依旧找不到文件信息了,这回的改动点是把mime类型由图片类型"image/jpeg"改成了附件类型:
- "application/octet-stream"
最后借鉴StackOverFlow的某贴的代码:http://stackoverflow.com/questions/30707681/multipart-file-upload-with-okhttp-spring,
- 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();
因为这个帖子的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
OkHttp上传文件,服务器端请求解析找不到文件信息的问题的更多相关文章
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- JavaWeb实现文件上传下载功能实例解析 (好用)
转: JavaWeb实现文件上传下载功能实例解析 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web ...
- [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取
0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...
- C# 应用 - 使用 WepApp 处理文件上传、下载请求
1. 代码 /// <summary> /// 文件上传下载控制器 /// </summary> public class FileController : ApiContro ...
- Java上传下载excel、解析Excel、生成Excel
在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...
- 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...
- MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: 处理文件上传的服务端组件Backload 用于处理文件上传的服务端组件 ...
- 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0
实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...
- mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等
使用bootstrap-fileinput 使用方式: 1.nuget:Install-Package bootstrap-fileinput 2.语言本地化{下载fileinput_locale_z ...
随机推荐
- Cocos2D旋转炮塔到指定角度(一)
原文地址:Rotating Turrets: How To Make A Simple iPhone Game with Cocos2D 2.X Part 2 翻译有节选和删除. 在你旋转炮塔之前,首 ...
- Ubuntu sudo 免密码之 sudoers 修改
Ubuntu sudo 免密码之 sudoers 修改 重要提示: 本文内容仅在虚拟机上实验通过.如果你不确信这个过程,请不要擅自改变/etc/sudoers.否则可能导致你的机器不可用.本文对由此产 ...
- [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
写在前面 最近在从零开始写一个移动端的AR系统,坑实在是太多了!!!整个项目使用了OpenCV第三方库,但对于摄像机来说,和原生Camera的方法基本相同. 实现 以OpenCV的JavaCamera ...
- Guava 教程(4):条件,多重映射和分片
原文出处: oschina 在本系列博客的前三章,我们大概介绍了Google的Guava类库和Collections类库,作为一名Java开发人员,相信你会从使用这些类库,进而来减少在你项目中使用样板 ...
- 朴素贝叶斯分类法 Naive Bayes ---R
朴素贝叶斯算法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 勿忘初心 无畏未来 作为一个初学者,水平有限,欢迎交流指正. 朴素贝叶斯分类法 ...
- 《java入门第一季》之面向对象静态内部类和非静态内部类的区别
很感谢在内部类章节,"开心阳"先生给与的建议.使用静态内部类.这里就简单说一下静态内部类的使用. package com.devin; public class MyMain{ p ...
- VisualSVN Server安装过程
运行VisualSVN-Server-2.7.3.msi程序, 如下图 点击Next, 下一步 选中 I accept选项, 点击Next, 下一步 选择默认配置, 服务和控制台组件方式, 点击 ...
- com.android.ddmlib.SyncException: Read-only file system
通过eclipse运行Android 程序到测试机时候 控制台出现如下错误: [2014-02-13 15:06:03 - MPlay] Failed to install MPlay.apk on ...
- SpriteBuilder中子节点的相对位置(%百分比定位)
子节点(或在这里确切的为精灵sprites)50%的偏移效果使得其在父节点中居中显示,该父节点的纹理在左下角(锚点为0,0). 这样做好过用父节点的位置的实际值来定位.根据父节点实际位置来定位在早期的 ...
- Linux下xargs命令详解
http://www.cnblogs.com/perfy/archive/2012/07/24/2606101.html xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数 ...