okhttp进行网络传输文件

其中使用了RXJava。

 1 public class HttpDataManager {
 2
 3     private static HttpDataManager INSTANCE;
 4     private RequestService service;
 5     private static String ONLINE_URL = "http://baidu.com/";
 6
 7     public static HttpDataManager getInstance() {
 8         if (INSTANCE == null) {
 9             INSTANCE = new HttpDataManager();
10         }
11         return INSTANCE;
12     }
13
14     public HttpDataManager() {
15         this.service = createService();
16     }
17
18     private RequestService createService() {
19         OkHttpClient client = new OkHttpClient.Builder()
20                 .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC))
21                 .build();
22         Retrofit retrofit = new Retrofit.Builder()
23                 .client(client)
24                 .baseUrl(ONLINE_URL)
25                 .addConverterFactory(ResponseConvertFactory.create())
26                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
27                 .build();
28         return retrofit.create(RequestService.class);
29     }
30
31     public RequestService getService() {
32         return service;
33     }
34 }
 1 public interface RequestService {
 2
 3     /**
 4      * getOcrRecog
 5      * @return
 6      */
 7     @Multipart
 8     @POST("reventondc/v5/ocr/json")
 9     Observable<OcrRecogResult> getOcrRecog(@Part MultipartBody.Part file);
10 }
 1 public class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
 2
 3     private final Gson gson;
 4     private final Type type;
 5
 6     GsonResponseBodyConverter(Gson gson, Type type) {
 7         this.gson = gson;
 8         this.type = type;
 9     }
10
11     @Override
12     public T convert(ResponseBody value) throws IOException {
13         String response = value.string();
14         checkError(response);
15
16         return gson.fromJson(response, type);
17     }
18
19
20     public void checkError(String response) throws MyHttpException {
21         try {
22             JSONObject rawResponeJson = new JSONObject(response);
23             int code = 200;
24             String msg = "";
25             if (rawResponeJson.has("code")) {
26                 code = rawResponeJson.getInt("code");
27             }
28             if (rawResponeJson.has("message")) {
29                 msg = rawResponeJson.getString("message");
30             }
31             if (code != 200) {
32                 throw new MyHttpException(code, msg);
33             }
34         } catch (JSONException e) {
35             e.printStackTrace();
36         }
37     }
38 }
 1 public class ResponseConvertFactory extends Converter.Factory {
 2
 3
 4     /**
 5      * Create an instance using a default {@link Gson} instance for conversion. Encoding to JSON and
 6      * decoding from JSON (when no charset is specified by a header) will use UTF-8.
 7      */
 8     public static ResponseConvertFactory create() {
 9         return create(new Gson());
10     }
11
12     /**
13      * Create an instance using {@code gson} for conversion. Encoding to JSON and
14      * decoding from JSON (when no charset is specified by a header) will use UTF-8.
15      */
16     public static ResponseConvertFactory create(Gson gson) {
17         return new ResponseConvertFactory(gson);
18     }
19
20     private final Gson gson;
21
22     private ResponseConvertFactory(Gson gson) {
23         if (gson == null) {
24             throw new NullPointerException("gson == null");
25         }
26         this.gson = gson;
27     }
28
29     @Override
30     public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
31                                                             Retrofit retrofit) {
32         return new GsonResponseBodyConverter<>(gson,type);
33     }
34 }
 1 public class MyHttpException extends RuntimeException {
 2
 3     public int code;
 4     public String msg;
 5
 6     public MyHttpException(int code, String msg){
 7         super(msg);
 8         this.code = code;
 9         this.msg = msg;
10     }
11
12 }

调用方式:

 1 mOcrConsumer = new Consumer<OcrRecogResult>() {
 2
 3             @Override
 4             public void accept(OcrRecogResult ocrRecogResult) throws Exception {
 5                 if (mCallBack != null) {
 6                     mCallBack.success(ocrRecogResult);
 7                 }
 8             }
 9         };
10
11         mThrowableConsumer = new Consumer<Throwable>() {
12             @Override
13             public void accept(Throwable throwable) throws Exception {
14                 if (mCallBack != null) {
15                     mCallBack.fail(throwable.getMessage());
16                 }
17             }
18         };

传输本地图片文件:

1 File file = new File(filepath);
2
3         RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
4         MultipartBody.Part body = MultipartBody.Part.createFormData("pic", file.getName(), requestFile);
5
6         HttpDataManager.getInstance().getService().getOcrRecog(body).subscribeOn(Schedulers.io())
7                 .subscribe(mOcrConsumer, mThrowableConsumer);

传输内存图片:

1 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
2         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
3
4         RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), byteArrayOutputStream.toByteArray());
5         MultipartBody.Part body = MultipartBody.Part.createFormData("pic", "src.jpg", requestFile);
6
7         HttpDataManager.getInstance().getService().getOcrRecog(body).subscribeOn(Schedulers.io())
8                 .subscribe(mOcrConsumer, mThrowableConsumer);

原文地址:https://www.cnblogs.com/zl1991/p/8609611.html

时间: 2024-10-08 08:17:22

okhttp进行网络传输文件的相关文章

Oracle工具之--ASM与文件系统及跨网络传输文件

Oracle工具之--ASM与文件系统及跨网络传输文件   Oracle DBMS_FILE_TRANSFER可以实现文件系统和ASM磁盘组之间实现文件传输及ASM磁盘组之间跨网络的传输. DBMS_FILE_TRANSFER:   The DBMS_FILE_TRANSFER package provides procedures to copy a binary file within a database or to transfer a binary file between datab

网络传输文件方案

网络传输文件有两方案: 1. 一次连接传输一个文件. 文件传输完成后,连接关闭,read返回0. 2. 一次连接传输多个文件. write() -> read() -> write() -> read(). read()隔开write(),等用户确认信息(回复).

Python 的网络传输文件功能的设计与实现

摘要:Python 是目前较流行的程序设计语言之一,它具有简单易学代码简洁等特点,并且Python 提供了大量的功能库文件,开发大型应用程序时非常方便,广泛用于网站开发.游戏后台开发等方面.该文基Python 提供的网络编程库,开发了网络文件传输的功能,该功能可以快速有效地在互联网上进行文件的传输.1 Python 介绍Python是由Guido van Rossum在1989年底创造的,在1991年发行了第一个公开版本.Python是一种面向对象的.解释型的.动态数据类型的程序设计语言.Pyt

【C/C++学院】(29)网络编程--实现跨平台传输文件(TCP版)

网络编程--实现跨平台传输文件(TCP版)源码下载地址 为了实现跨平台,需要对跨平台的代码进行条件编译. gcc的-D选项. 连接选项 -lWs2_32 代表要用Ws2_32.lib这个库 gcc编译选项,-D 代表定义一个宏,等同于在c语言当中定义 #defind WIN 在windows下,使用socket之前,必须使用WSAStartup初始化socket,程序运行结束以后必须调用WSACleanup释放相关资源 windown下,关闭socket使用closesocket函数 //mak

大文件/数据网络传输方法总结(转载)

网络编程中不免会遇到需要传输大数据.大文件的情况,而由于socket本身缓冲区的限制,大概一次只能发送4K左右的数据,所以在传输大数据时客户端就需要进行分包,在目的地重新组包.而实际上已有一些消息/通讯中间件对此进行了封装,提供了直接发送大数据/文件的接口:除此之外,利用共享目录,ftp,ssh等系统命令来实现大文件/数据也不失为一种好的方法. 1.基础的基于socket进行传输 基础的基于socket进行传输关键在于控制,需要自己行分包和组包. ////////////////////////

PHP-02.文件上传、php保存/转移上传的文件、常见的网络传输协议、请求报文及属性、响应报文及属性

关系数组 array("key"=>"value",...) ; get没有数据大小的限制 post上传大小没有限制 不指定上传方式,默认是get 文件上传 需要在html中 form属性中添加 enctype = "multipart/form-data" <!-- 上传文件必须设置 enctype ='multipart/form-data' --> <form action="text01.php"

java socket 多线程网络传输多个文件

http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人阅读 评论(1) 收藏 举报  分类: JAVA(158)  由于需要研究了下用 java socket 传输文件,由于需要传输多个文件,因此,采用了多线程设计.客户端每个线程创建一个 socket 连接,每个 socket 连接负责传输一个文件,服务端的ServerSocket每次 accept

网络传输速度bps与下载文件所需时间的换算

相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就给您详细介绍一下带宽中提到的bps与下载文件所需时间的换算! 先看下图! 这是我个人上网的宽带,注意拉,速度是"100.0Mbps": 到这里,俺想试问一个问题,以这样的速度,假设处于理想状态,那么,我下载100MB的文件,需要多少时间呢? 如果您回答,需要1秒钟,那么,您就错了,并且是完

Android网络编程只局域网传输文件

Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: 1 package com.jiao.filesend; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java