@Override
public void updateHead(@NonNull RequestForm requestForm, @NonNull UpdateHead callback) {
RequestBody requestFile1;
MultipartBody.Part part1;
File file1 = new File(requestForm.getQuest_id());
requestFile1 = RequestBody.create(MediaType.parse("multipart/form-data"), file1);
part1 = MultipartBody.Part.createFormData("file", file1.getName(), requestFile1);
NetworkManager.getUserInstance()
.getUserApi()
.updateHead(part1)
.subscribeOn(Schedulers.newThread())//子线程访问网络
.observeOn(AndroidSchedulers.mainThread())//回调到主线程
.doOnSubscribe(() -> {
})
.subscribe(defaultResponseVo -> {
try {
callback.onDataAvailable(defaultResponseVo);
} catch (Exception e) {
e.printStackTrace();
}
}, throwable -> {
try {
callback.onDataNotAvailable(throwable);
} catch (Exception e) {
e.printStackTrace();
}
});
}
requestForm.getQuest_id()为文件的路径
@Multipart
@POST("/users/updateHead")
Observable<DefaultResponseVo> updateHead(@Part MultipartBody.Part file);
后台:
@RequestMapping(value = "/updateHead")
@ResponseBody
public ResponseBuilder updateHead(HttpServletRequest request, @RequestParam("file") MultipartFile uploadFile) {
String user = (String) request.getAttribute("USER");
if (StringUtil.isEmpty(user))
return ResponseBuilder.ERROR_AUTHORIZATION_FAIL;
try {
FastDFSClient fastDFSClient = new FastDFSClient("classpath:conf/client.conf");
String originalFileName = uploadFile.getOriginalFilename();
String extName = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
String url = fastDFSClient.uploadFile(uploadFile.getBytes(), extName);
url = HealthConstant.IMAGE_SERVER_URL + url;
userService.updateUser(user, url);
ResponseBuilder reBuilder = ResponseBuilder.SUCCESS;
reBuilder.setResult(url);
return reBuilder;
} catch (Exception e) {
e.printStackTrace();
return new ResponseBuilder(400, 99, "图片上传失败");
}
}
后台图片上传我是用FASTDFS
后台接收图片
springmvc配置:
<!-- 定义文件上传解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>