单个文件上传 @Multipart @Part
*Retrofit接口
@Multipart @POST("file/upload") //参数比较多但最主要的就是标红的地方 Observable<TouXiangBean> uploadImage(@Query("source") String source , @Query("appVersion") String appVersion , @Query("uid") String uid, @Part MultipartBody.Part file, @Query("token") String token);把所有代码先贴上然后再解释
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main5); creat = new RetrofitManager("https://www.zhaoapi.cn").creat(Api.class); new Thread(new Runnable() { @Override public void run() { Uri externalContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String[] projImage = {MediaStore.Images.Media._ID , MediaStore.Images.Media.DATA , MediaStore.Images.Media.SIZE , MediaStore.Images.Media.DISPLAY_NAME}; Cursor mCursor = getContentResolver().query(externalContentUri, projImage, MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED + " desc"); if (mCursor != null) { while (mCursor.moveToNext()) { // 获取图片的路径 String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)); int size = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media.SIZE)) / 1024; String displayName = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)); // 获取该图片的父路径名 String dirPath = new File(path).getParentFile().getAbsolutePath(); list.add(path); //存储对应关系 Log.e("TAG", "path:" + path + "size:" + size + "displayName" + displayName + "" + ""); } mCursor.close(); } if(list!=null){ String s = list.get(0); Log.e("TAG111",s); File file = new File(s); final RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); Observable<TouXiangBean> android = creat.uploadImage("android", "101", "2902", body, MyApp.token); android.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<TouXiangBean>() { @Override public void accept(TouXiangBean responseBody) throws Exception { Log.e("TAG111",responseBody.getMsg()); } }); } } }).start(); }首先开始获取本地所有图片的地址等信息
new Thread(new Runnable() { @Override public void run() { Uri externalContentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String[] projImage = {MediaStore.Images.Media._ID , MediaStore.Images.Media.DATA , MediaStore.Images.Media.SIZE , MediaStore.Images.Media.DISPLAY_NAME}; Cursor mCursor = getContentResolver().query(externalContentUri, projImage, MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED + " desc"); if (mCursor != null) { while (mCursor.moveToNext()) { // 获取图片的路径 String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)); int size = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media.SIZE)) / 1024; String displayName = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)); // 获取该图片的父路径名 String dirPath = new File(path).getParentFile().getAbsolutePath(); } mCursor.close(); } } }).start();获取到本地地址之后将所有地址放在集合,这是一个简单的demo所以并没有使用mvp框架直接用Rxjava+Retrofit请求网络了,先拿到file对象也就是Body
String s = list.get(0); File file = new File(s); final RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
creat = new RetrofitManager("https://www.zhaoapi.cn").creat(Api.class); creat.uploadImage("android", "101", "2902", body, MyApp.token).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<TouXiangBean>() { @Override public void accept(TouXiangBean responseBody) throws Exception { Log.e("TAG111",responseBody.getMsg()); } });
好了,到这里就完成了,看看自己打的Log是否成功