OkHttp上传文件,服务器端请求解析找不到文件信息的问题
来源:互联网 发布:oracle数据库发展历史 编辑:程序博客网 时间:2024/06/06 00:10
长话短说,不深入解释了,官方给的上传案例代码:
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
0 0
- OkHttp上传文件,服务器端请求解析找不到文件信息的问题
- okhttp的请求+上传文件
- 上传文件找不到问题
- okhttp post请求上传服务器File文件
- OkHttp的post上传文件
- okhttp上传文件实例
- okhttp上传文件
- okhttp-上传文件
- okhttp封装文件上传
- okhttp上传文件
- OKhttp post上传文件
- OkHttp 3.0之后版本GET、POST请求以及POST上传文件的示例代码
- nanoHTTPD 接收 okhttp 上传的文件
- OkHttp使用+文件的上传+断点续传
- kindeditor上传文件时报找不到action的result问题
- Laravel 上传文件报找不到临时文件的问题
- PHP上传文件后找不到临时文件的问题
- Spring Boot整合UEditor,解决找不到上传文件的问题
- tee命令
- (转)js页面跳转整理
- python中一些实用而有趣的模块
- 算法3
- css的三种插入代码的形式
- OkHttp上传文件,服务器端请求解析找不到文件信息的问题
- 基础方法
- Inotify测试(2):inotifywait 与 PyInotify 监控层级比较
- hdu1069 Monkey and Banana
- 一些任务调度情况
- stty命令使用
- nginx proxy_next_upstream导致的一个重复提交错误
- 关于ALSA算法代码的学习与修正
- 编译原理课设之简单编译器实现