转发之上传图片

领导让我写一个转发外壳,用来转发和响应用户,对自身请求不做处理。
之前一直都是json风格的文本信息。然后告诉我需要上传图片,但是文本的格式上传就会失败。
解决思路:
1、判断请求类型是否是上传图片的请求
//判断请求是否是上传图片请求
String contentType = request.getContentType();
if (contentType.startsWith(“multipart/form-data”)) {
try {
return this.uploadImg(request);
} catch (Exception e) {
// e.printStackTrace();
OkResponseWrap okResponseWrap = new OkResponseWrap();
okResponseWrap.setCode(404);
okResponseWrap.setBody(“上传失败!”);
return okResponseWrap;
}
2、调用 uploadImg方法把数据放到请求体里面,然后封装成MultipartBody.Builder通过from表单提交数据。然后及时做出响应

  /**
  • 发起post请求,参数为json
  • @param request
  • @return
    */
    private OkResponseWrap post(HttpServletRequest request) {
    //获取请求路径
    String requestUrl = request.getRequestURI().toString();
//判断请求是否是上传图片请求
String contentType = request.getContentType();
if (contentType.startsWith("multipart/form-data")) {
  try {
    return this.uploadImg(request);
  } catch (Exception e) {
  //        e.printStackTrace();
    OkResponseWrap okResponseWrap = new OkResponseWrap();
    okResponseWrap.setCode(404);
    okResponseWrap.setBody("上传失败!");
    return okResponseWrap;
  }
} else {
  //获取请求体
  String jsonParams = HttpHelper.getBodyString(request);
  //构造请求体
  //StringBuffer remoteUrl = new StringBuffer(this.transmitProperties.getRemoteUrl() + requestUrl.replaceFirst(this.transmitProperties.getHostUrl(), ""));
  StringBuffer remoteUrl = judgeRequestUrl(requestUrl);
  RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=ut-8"), jsonParams);
  Request.Builder builder = new Request.Builder().url(remoteUrl.toString()).post(requestBody);
  Request okRequest = this.createOkRequest(builder, request);
  //发起请求
  return this.getRemoteResponse(okRequest, request);
}

private OkResponseWrap uploadImg(HttpServletRequest request) throws IOException, ServletException {
//获取请求路径
String requestUrl = request.getRequestURI();
//获取请求头
Enumeration headerNames = request.getHeaderNames();
//获取请求参数
Map<String, String[]> queries = request.getParameterMap();
StringBuffer sb = this.buildRemoteUrlWithParam(requestUrl, queries);
//key-value格式根据key获取上传文件
Part file = request.getPart(“files”);
//获取value-上传图片的名字
String name = file.getSubmittedFileName();
//读取文件
byte[] imageBuf = new byte[(int) file.getSize()];
file.getInputStream().read(imageBuf);
RequestBody filebody = MultipartBody.create(MediaType.parse(“image/png”), imageBuf);
MultipartBody.Builder multiBuilder = new MultipartBody.Builder();
//这里是 封装上传图片参数
multiBuilder.addFormDataPart(“files”, name, filebody);
//参数以添加header方式将参数封装,否则上传参数为空
// 设置请求体
multiBuilder.setType(MultipartBody.FORM);
MultipartBody multiBody = multiBuilder.build();
Request okRequest = new Request.Builder().url(sb.toString()).post(multiBody).build();
OkResponseWrap remoteResponse = getRemoteResponse(okRequest, request);
return remoteResponse;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值