retrofit上传、下载文件
上传文件:
接口方法:
@POST("post")
@Multipart
Call<ResponseBody> upload(@Part MultipartBody.Part file);
具体使用:
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build();
UploadService uploadService = retrofit.create(UploadService.class);
@Test
public void upload() throws IOException {
File file = new File("D://desktop//1.txt");
MultipartBody.Part part = MultipartBody.Part.createFormData("file1",
"1.txt", RequestBody.create(MediaType.parse("text/plain"), file));
Call<ResponseBody> call = uploadService.upload(part);
System.out.println(call.execute().body().string());
}
下载文件:
普通下载:
接口方法:
@GET
Call<ResponseBody> download(@Url String url);
使用:
@Test
public void downLoad() throws IOException {
Response<ResponseBody> response = uploadService.download("http://ww3.sinaimg.cn/mw600/3ecd3787jw1e31uvhxzp8j.jpg")
.execute();
InputStream inputStream = response.body().byteStream();
FileOutputStream fileOutputStream = new FileOutputStream("D://desktop//1.jpg");
int len;
byte[] buffer = new byte[4096];
while ((len = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.close();
inputStream.close();
}
依据下载地址,对得到的response.body获取字节流即可实现下载功能。
Rxjava下载:
接口方法:
@GET
Flowable<ResponseBody> downloadRxjava(@Url String url);
具体使用:
Retrofit retrofit1 = new Retrofit.Builder().baseUrl("https://www.httpbin.org/")
.addCallAdapterFactory(RxJava3CallAdapterFactory.create()).build();
UploadService uploadService1 = retrofit1.create(UploadService.class);
@Test
public void downloadRxjava() {
uploadService1.downloadRxjava("http://ww3.sinaimg.cn/mw600/3ecd3787jw1e31uvhxzp8j.jpg")
.map(new Function<ResponseBody, File>() {
@Override
public File apply(ResponseBody ResponseBody) throws Throwable {
InputStream inputStream = ResponseBody.byteStream();
File file = new File("D://desktop//1.jpg");
FileOutputStream fileOutputStream = new FileOutputStream(file);
int len;
byte[] buffer = new byte[4096];
while ((len = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.close();
inputStream.close();
return file;
}
}).subscribe(new Consumer<File>() {
@Override
public void accept(File file) throws Throwable {
//do
}
});
while (true);
}
用RxJava就可以直接在apply中对文件进行下载操作。在搭配嵌套请求才能下载的情况下使用。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkeek
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01