安卓端上传图片到java服务器,通过okhttp 网络请求框架
获取到选中的头像后,上传到服务器
private void updateUserHeadImageUri(String imageString, String imagePath){
//显示等待UI
showLoading(getString(R.string.message_loading_loading));
OkHttpClient okHttpClient = CloudHelper.getInstance().getOkHttpClient();
String json = "";
ApiInfo apiInfo = new ApiInfo();
getApiInfo(apiInfo);
apiInfo.setType(ApiConst.URI_API_CLIENT_UPDATE_USER_HEADIMAGE + "");
ApiRequest<Object> apiRequest = new ApiRequest<Object>();
apiRequest.setApiInfo(apiInfo);
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//ApiRequest.json文件的存放路径
String outPath = this.getFilesDir().getAbsolutePath() + File.separator + ApiConst.FILES_USER + File.separator + mUserModel.getUserID();
//重命名
String outFilePath = "";
//截取路径
String[] array1=imagePath.split("/");
for (int i = 1; i < array1.length - 1; i++){
outFilePath += File.separator + array1[i];
}
//重命名之后的名字
outFilePath += File.separator + "headImage.png";
File outFile = new File(imagePath);
outFile.renameTo(new File(outFilePath));
//输出头像时,头像地址为改名后的地址
File[] files = new File[1];
files[0] = new File(outFilePath);
MultipartBody.Builder multiBuilder = new MultipartBody.Builder("AaB03x");//构建者模式
for (File file:files) {
multiBuilder.addFormDataPart("file", StringUtilities.getValueEncoded(file.getName()), RequestBody.create(MultipartBody.FORM, file));
}
// 桥文件最后准备
Gson gson = new Gson();
json = gson.toJson(apiRequest);
File apiRequestFile = new File(outPath + File.separator + "ApiRequest.json");
FileUtilities.writeFile(outPath + File.separator + "ApiRequest.json",json);
multiBuilder.addFormDataPart("ApiRequest",apiRequestFile.getName(),RequestBody.create(MultipartBody.FORM, apiRequestFile));
MultipartBody multiBody = multiBuilder.build();
RequestBody body = multiBody;
Request request = new Request.Builder()
.url(CloudHelper.getInstance().getUriApi() + ApiConst.URI_API_CLIENT_UPDATE_USER_HEADIMAGE)
.addHeader("lang", LanguageUtilities.getInstance().GetUriLanguage())
.post(body)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
Message msg;
@Override
public void onFailure(Call call, IOException e) {
//云服务没有启动或者出错,或者设备没有连接到互联网!
sendConnectErrMsg();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//失败
if(false == response.isSuccessful()){
//云服务异步调用失败。
sendResponseErrMsg();
return;
}
Headers headers = response.headers();
String result = headers.get(ApiConst.API_RESPONSE_RESULT);
//错误部分需要进行统一处理!
if(StringUtilities.isEmpty(result)){
//云服务异步调用失败。
sendResponseErrMsg();
return;
}
//失败的时候
if(result.equalsIgnoreCase(ApiConst.API_RESPONSE_FAULT + "")){
String body = response.body().string();
//发送业务逻辑错误,错误都是有明确原因的
sendBusinessErrMsg(body);
return;
}
//成功的时候,什么也不做 如果需要则返回给各自子类自己完成
msg = new Message();
msg.what = ApiConst.API_REQ_TYPE_UPDATE_HEADIMAGE;
//发个消息代表成功
mBusinessHandlerUri.sendMessage(msg);
}
});
}
服务器获取成功后,返回消息给安卓客户端
@Override
protected void handleBusinessMessage(Message msg) {
super.handleBusinessMessage(msg);
switch (msg.what){
case 0://有明确原因的失败 ---- 云返回的有明确的错误的信息
ApiResult apiResult = (ApiResult)msg.obj;
showOkMessage(apiResult.getMessage());
ShowLoadFailed(apiResult.getMessage(), 2800);
switch (apiResult.getCode()) {
default:
break;
}
break;
case ApiConst.API_REQ_TYPE_UPDATE_HEADIMAGE:
//将上传的图片保存到本地
ShowLoadSuccess(getString(R.string.message_loading_update_success), 1500);
String outFilePath = getUserHeadImagePath();
BitmapUtilities.saveBitmapFile(mHeadImage,outFilePath);
default: