// 文件上传 @POST("quarter/publishJoke") @Multipart Observable<ResponseBody> uploadFile(@QueryMap Map<String,String> map, @Part List<MultipartBody.Part> parts);
public void uploadFiles(List<File> files, HashMap<String, String> mapStr) { ArrayList<MultipartBody.Part> parts = new ArrayList<>(); for (int i = 0; i < files.size(); i++) { File file = files.get(i); RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part jokeFile = MultipartBody.Part.createFormData("jokeFiles", file.getName(), requestFile); parts.add(jokeFile); } RetrofitUtil.getApiService(HttpConfig.BASE_URL).uploadFile(mapStr, parts) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<ResponseBody>() { @Override public void onSubscribe(Disposable d) { disposable = d; } @Override public void onNext(ResponseBody responseBody) { try { String string = responseBody.string(); Log.e("AA", string); } catch (IOException e) { e.printStackTrace(); } } @Override public void onError(Throwable e) { Log.e("AA", e.toString()); } @Override public void onComplete() { } }); }
// 通过uri
// api>=19 @SuppressLint("NewApi") private static String getRealPathFromUri_AboveApi19(Context context, Uri uri) { String filePath = null; String wholeID = DocumentsContract.getDocumentId(uri); // 使用':'分割 String id = wholeID.split(":")[1]; String[] projection = { MediaStore.Images.Media.DATA }; String selection = MediaStore.Images.Media._ID + "=?"; String[] selectionArgs = { id }; Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null); int columnIndex = cursor.getColumnIndex(projection[0]); if (cursor.moveToFirst()) { filePath = cursor.getString(columnIndex); } cursor.close(); return filePath; }