OkHttp异步上传文件:
1.确定上传文件的类型:
public static final MediaType MEDIA_TYPE_MARKDOWN=MediaType.parse(“text/x-markdown;charset=utf-8”);
2.获取文件的路径
2.1首先要添加sd卡的读写权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2.2判断当前设备是否挂载了SD卡
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
//有SD卡
} else {
//没有SD卡
}
2.3获取路径的接口
String path= Environment.getExternalStorageDirectory().getAbsolutePath();
2.4如果是模拟器则可以在这个路径下放入文档
3.构造文件
3.1File file=new File(path,"xx.txt");
3.2作为参数传入post中
post(RequestBody.create(MEDIA_TYPE_MARKDOWN,file));
3.3如何监听上传的进度呢?待解答!
Okhttp异步文件下载
1.InputStream is=response.body().byteStream();//获取输入流
2.确定文件下载到设备的地址
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//挂载了sd卡
filepath=Environment.getExternalStorageDirectory().getAbsolutePath();
}else{
filepath=getFilesDir().getAbsolutePath();
}
File file=new File(filepath,"文件名");
3.将输入流通过FileOutputStream输入到该file文件中
FileOutputStream fos=new FileOutputStream(file);
byte[] buffer=new byte[2048];//缓冲区
int length=0;
while((length=is.read(buffer))!=-1){
//如果没读完,继续将数据读入buffer中
fos.write(buffer,0,len);
//将buffer中的内容写到file中
}
4.异步上传Multipart文件
RequestBody reqeustBody=new MultipartBody.Builder().setType(Multipart.FROM)
.addFormDataPart("key","value").RequestBody.create(MediaType.prase("image/png"),new File(path))).build();