Android :Retrofit实现文件的上传和下载

2023-10-27

Retrofit实现文件的上传和下载

UploadService接口

package com.enjoy.networkdemo;

import java.io.File;

import io.reactivex.rxjava3.core.Flowable;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Streaming;
import retrofit2.http.Url;

public interface UploadService {

    @POST("post")
    @Multipart
    Call<ResponseBody> upload(@Part MultipartBody.Part file);


    @Streaming
    @GET
    Call<ResponseBody> download(@Url String url);

    @Streaming
    @GET
    Flowable<ResponseBody> downloadRxJava(@Url String url);
}

UploadFileUnitTest实现普通方法和rxjava两种下载文件的办法

package com.enjoy.networkdemo.retrofit;

import com.enjoy.networkdemo.HttpbinService;
import com.enjoy.networkdemo.UploadService;

import org.junit.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.functions.Function;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;

public class UploadFileUnitTest {
    Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build();
    UploadService uploadService = retrofit.create(UploadService.class);
//文件上传
    @Test
    public void uploadFileTest() throws IOException {
        File file1 = new File("C:\\Users\\Administrator\\Desktop\\1.txt");
        MultipartBody.Part part = MultipartBody.Part.createFormData("file1",
                "1.txt", RequestBody.create(file1, MediaType.parse("text/plain")));

        Call<ResponseBody> call =
                uploadService.upload(part);
        System.out.println(call.execute().body().string());
    }
//文件普通下载
    @Test
    public void downloadTest() throws IOException {
        Response<ResponseBody> response = uploadService.download(
            "https://fga1.market.xiaomi" +
                ".com/download/AppStore/07adf043b0b2c40371abc6c685363e83d27f3efd7/com.sdu.didi" +
                ".psnger.apk")
            .execute();
//        response.isSuccessful()
        InputStream inputStream = response.body().byteStream();
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\a.apk");
        int len;
        byte[] buffer = new byte[4096];

        while ((len = inputStream.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
        fos.close();
        inputStream.close();
    }
//文件rxjava实现下载
    @Test
    public void downloadRxjavaTest() {
        uploadService.downloadRxJava("https://fga1.market.xiaomi.com/download/AppStore/07adf043b0b2c40371abc6c685363e83d27f3efd7/com.sdu.didi.psnger.apk")
                .map(new Function<ResponseBody, File>() {
                    @Override
                    public File apply(ResponseBody responseBody) throws Throwable {
                        InputStream inputStream = responseBody.byteStream();
                        File file = new File("C:\\Users\\Administrator\\Desktop\\a.apk");
                        FileOutputStream fos = new FileOutputStream(file);
                        int len;
                        byte[] buffer = new byte[4096];

                        while ((len = inputStream.read(buffer)) != -1) {
                            fos.write(buffer, 0, len);
                        }
                        fos.close();
                        inputStream.close();
                        return file;
                    }
                }).subscribe(new Consumer<File>() {
            @Override
            public void accept(File file) throws Throwable {

            }
        });
        while (true) {
        }
    }
}

参考

1、Android网络开源库-Retrofit(二) 文件上传、下载及进度监听

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android :Retrofit实现文件的上传和下载 的相关文章

随机推荐

  • Django视图学习——在视图中使用模型

    视图不仅可以获取客户端长传的数据 还可以通过模型访问后台的数据库 本文介绍以下内容 1 在视图中输出模型数据 2 数据分页 1 在视图中输出模型数据 任务 定义一个模型 然后通过该模型范围访问数据库 1 在项目子文件夹chapter5中添加
  • go-gin 自定义应用metrics

    文章目录 前言 一 gin添加go运行时metrics 1 创建一个gin server 2 创建一个metrics的路由 3 启动服务 4 查看结果 metrics页面 pprof页面 二 gin自定义应用程序metrics 官方库示例
  • 在python环境下使用selenium + chromedriver截屏网页

    在python环境下使用selenium和chromedriver工具 自动将网页内容进行截屏保存 安装 selenium比较简单 如下即可 pip install selenium 据说 chromedriver的版本一定要与Chrome
  • 顺序表起步

    时间限制 1000ms 内存限制 256MB 1 按照课本 编写顺序表及其基本运算 顺序表定义使用以下代码 typedef int datatype 结点的数据类型 假设为int const int maxsize 100 最大表长度 假设
  • fstream、ifstream、ofstream和stringstream

    ifstream ifstream 是 C 标准库中用于文件读取的输入流类之一 用于从文件中读取数据 可以通过打开文件并将其与 ifstream 对象绑定 然后使用输入操作符 gt gt 从文件中读取数据 代码示例 include
  • pgsql删除表中所有数据_PostgreSQL数据库中的表和数据(Tables & Data)

    照顾好你的数据 数据库也会照顾你 保持数据库的整洁 查询起来也会更快 应用也会少些错误 半夜被叫醒解决数据问题并不酷 接下来 就和章郎虫博主一起来了解postgresql的表和数据吧 一 选择一个好的数据库对象名 Choosing good
  • Cascade-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

    文章目录 4 Cascade MVSNet CVPR 2020 4 0 主要特点 4 1 背景介绍 4 2 代价体构造回顾 4 3 Cascade MVSNet 4 4 Loss的设置 4 5 Cascade MVSNet实战操作 4 6
  • echarts图表,利用仪表盘类型变换成环形渐变图

    使用仪表盘类型图表type gauge 变换成以上图片样式 实现环形图的渐变以及背景环 1 计算当前数据占总数的比例 从而得出当前环开始角度和结束角度 目前上图中开始角度都是0 结束角度通过数据占比得到 当前数据 三个数和 360 得到结束
  • 【JS案例】分页器——使用原生JavaScript实现

    在使用vue编写完一个分页器组件后 我对分页器的底层逻辑产生了兴趣 想在此组件的基础上再深入了解一些分页器的底层逻辑 了解vue与原生js的区别 我在github上看了一些大神写的分页器 属实牛逼 之后自己也根据他们的编写逻辑 反复推敲了个
  • 批量挖掘SRC思路与实践二

    批量刷SRC实践 1 用友nc的命令执行漏洞案例 Poc http xxx xxxx xxxx xxxx servlet ic bsh servlet BshServlet gt http xxx xxxx xxxx xxxx servle
  • Windows下装linux子系统

    1 打开 适用于linux的windows子系统 功能 控制面板 程序 启用或关闭windows功能 找到 适用于linux的windows子系统 并打钩 如图 2 打开 开发者选项 设置 搜索 开发者设置 开启 3 去微软自带软件商店下载
  • 宝塔面板+悟空CRM功能模块安装搭建部署教程 环境配置

    悟空CRM目录结构 wk modules module 无代码模块 common 基础模块 平台使用的主要技术栈 名称 版本 说明 spring cloud alibaba 2021 0 4 核心框架 spring boot 2 6 11
  • L2TP&PPTP

    L2TP 1 引言 隧道技术是建立安全VPN的基本技术之一 类似于点对点连接技术 在公用网建立一条数据遂道 让数据包通过这条隧道传输 隧道是由隧道协议形成的 分为第二 三层隧道协议 第二层隧道协议有L2F PPTP和L2TP等 是先把各种网
  • eclipse cdt无法调试_【STM32】搭建基于Eclipse平台的STM32调试环境

    以NuttX工程为例 硬件平台STM32F103C8 1 导入工程 File gt Import 选择Existing Code as Makefie Project 点击next 输入工程名字 nuttx 以及工程路径 home boot
  • r语言 list添加_R语言 第五章 高级绘图工具(5)

    散点图 散点图可用来描述两个连续型变量间的关系 在lattice中 可以使用xyplot函数生成散点图 散点图可以用来描述两个连续型变量间的关系 再lattice中 可以使用xyplot函数生成散点图 实例 利用R自带的焉尾花数据集iris
  • 字符串转化为对象的几种方法

    参考 https www cnblogs com UniverseWang p 6973396 html
  • Spring 中@Transactional(rollbackFor = Exception.class) 事物回滚

    Transactional rollbackFor Exception class 事物回滚 public JsonResult addLike Integer userId List
  • java fx exe_javaFx打包exe流程

    环境 oracle jdk 11 0 2 LTS gitBash cmd javafx13 gradle 5 2 1 首先打包jar 两个压缩包都一样的 解压后会有javafx的依赖jar包和项目jar包 在这里 需要用到几个工具 安装就不
  • 浅谈基于SDL的2D纵版弹幕射击游戏相关经验心得

    浅谈基于SDL的2D游戏开发相关 前言 本人才疏学浅 大一新生一枚 写这篇文章的目是为了跟大家分享下自己的一些经验 进入正题 首先本文这一切的一切都是基于SDL开发WINDOWS平台上的游戏 如今做2D游戏用到的图形库很多 大一这一年来学过
  • Android :Retrofit实现文件的上传和下载

    Retrofit Retrofit实现文件的上传和下载 参考 Retrofit实现文件的上传和下载 UploadService接口 package com enjoy networkdemo import java io File impo