最近项目中涉及到用户头像上传的问题,所以,就Okhttp,实现本地图片文件的获取,同时上传服务器。
一、首先,需要设置手机的读写权限(尤其是android 6.0以后,需要动态获取,否则,会出现获取文件失败问题,关于动态权限的获取,可以参考另一篇博客:https://blog.youkuaiyun.com/ygz111111/article/details/80281966)
二、获取本地文件:
private List<File> searchFile() {
String result = "";
files = new File(Environment.getExternalStorageDirectory()+"/").listFiles();
List<File> fileList=new ArrayList<>();
for (int i=0;i<files.length;i++){
if (files[i].getAbsolutePath().endsWith(".jpg")||files[i].getAbsolutePath().endsWith(".jpeg")){
File file1=new File(files[i].getPath());
fileList.add(file1);
}
}
return fileList;
}
三、Okhttp实现上传:
public void loadHeadTest(String url,File file){
// Map
okHttpClient=new OkHttpClient();
//构造请求体
RequestBody multipartBuilder=new MultipartBuilder()
//提交文件参数
.addFormDataPart("file",file.getName(),RequestBody.create(MediaType.parse("image/*"),file))
//提交其他参数
.addFormDataPart("userId","04abae2a4a734e5b8580bdfcf4606b2e")
.build();
Request request = new Request.Builder()
.url(url)
//post 参数实体对象
.post(multipartBuilder)
.build();
try {
Response response=okHttpClient.newCall(request).execute();
// if(response.isSuccessful()){
// System.out.println("MainActivity.loadHeadTest------------------->"+response.body().string());
// }
} catch (IOException e) {
e.printStackTrace();
}
}
至此,完成本地图片的上传
需要注意的问题:
在服务器端一般都会对上传的图片格式、大小做一定的限制,需要与服务器端统一,才能上传成功。