安卓使用 retrofit2 和 rxjava2
- url:
- @Multipart
- @POST(UrlTools.STORYUPLOAD)
- Observable<Result> saveReport(@Part List<MultipartBody.Part> parts)
- activity:
- if (contentText.equals("") && mSelected.size() <1) {
- ToastUtils.showBottomToast("请输入内容", 0);
- return;
- }
- ContentResolver contentResolver = getContentResolver();
- MultipartBody.Builder builder = new MultipartBody.Builder()
- .setType(MultipartBody.FORM)
- .addFormDataPart("name", contentText);// 表单类型; add 需要的文本, 第一个参数与后台对应, 传输需要的文本
- for (int i = 0; i < mSelected.size() - 1; i++) {
- File file1 = null;
- file1 = new File(getFilePathFromContentUri(mSelected.get(i), contentResolver));
- RequestBody imageBody = RequestBody.create(MediaType.parse("multipart/form-data"), file1);
- builder.addFormDataPart("file", file1.getName(), imageBody);//imgfile 后台接收图片流的参数名
- }
- List<MultipartBody.Part> parts = builder.build().parts();
- // 实现请求
- utilsPresenter.getStory(VintageActivity.this, parts);
开始请求:
- // 上传文件
- @Override
- public void upFile(BaseImpl context, List<MultipartBody.Part> parts) {
- RetrofitRequest.getApiService()
- .saveReport( parts)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new DefaultObserver<Result>(context, false) {
- @Override
- public void onSuccess(Result story) {
- listener.onSuccess(story);
- }
- @Override
- public void onFail(Result response) {
- listener.onError(response, STORYLIST);
- }
- });
- }
Java 后台 springboot2
- @RequestMapping(value = "/upload", method = RequestMethod.POST)
- @ResponseBody
- public String handleFileUpload(HttpServletRequest request) {
- MultipartHttpServletRequest params = ((MultipartHttpServletRequest) request);
- List<MultipartFile> files = ((MultipartHttpServletRequest) request)
- .getFiles("file");
- String name = params.getParameter("name"); // 参数与安卓 addFormDataPart 的第一个参数对应
- System.out.println("name:" + name);
- String id = params.getParameter("id");
- System.out.println("id:" + id);
- Map<String, String> urlMap = new HashMap<>();
- MultipartFile file = null;
- BufferedOutputStream stream = null;
- for (int i = 0; i < files.size(); ++i) {
- file = files.get(i);
- if (!file.isEmpty()) {
- try {
- byte[] bytes = file.getBytes();
- stream = new BufferedOutputStream(new FileOutputStream(
- new File("./../images/"+file.getOriginalFilename())));// 存在项目根目录下
- stream.write(bytes);
- stream.close();
- urlMap.put(SERVER_URL+"resource/images/" , file.getOriginalFilename());
- } catch (Exception e) {
- stream = null;
- return e.toString();
- }
- } else {
- return "空";
- }
- }
- return "成功";
来源: http://www.bubuko.com/infodetail-2996446.html