模拟表单提交图片和数据
后台模拟表单提交图片和数据到指定服务器,使用
jdk 1.8
//创建HttpClient
HttpClient httpClient = HttpClientBuilder.create().build();
//创建HttpPost 后面地址为要发送数据的地址
HttpPost httpPost = new HttpPost("http://*******");
//创建MultipartEntityBuilder
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
//封装数据()
multipartEntityBuilder.addTextBody("platform_id", "8000", ContentType.APPLICATION_JSON);
//由于本人接收到的为base64的图片数据此处转码并写入临时文件加夹中,如果直接是文件可以new File, 方法很好找,至于base64 解码方法网上抄的,为啥不太懂, 如果有大佬愿意, 希望能得到解答
// try catch 好像是解码用到的
try {
//Base64解码
String imageStr = imageBase64.substring(imageBase64.indexOf(",") + 1);
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(imageStr);
for(int i=0;i<b.length;++i)
{
if(b[i]<0)
{//调整异常数据
b[i]+=256;
}
}
// 创建临时文件文件目录位于系统临时文件夹把, 本人系统win7*64可以用, 其他系统未知,可以一试
File temp = File.createTempFile("pattern", ".jpg");
// 向临时文件中写入内容
OutputStream out = new FileOutputStream(temp);
out.write(b);
out.flush();
out.close();
//添加上传文件 若直接上传得文件类型,可以把temp.getPath()换成文件路径格式 :“文件路径”
File file = new File(temp.getPath());
//封装图片文件数据
multipartEntityBuilder.addPart("file", new FileBody(file, ContentType.IMAGE_JPEG));
//封装数据到httppost
httpPost.setEntity(multipartEntityBuilder.build());
//发送数据。 数据地址在上面new的时候有
HttpResponse httpResponse = httpClient.execute(httpPost);
// 善后工作
if (httpResponse.getStatusLine().getStatusCode() == 200) {
//删除临时文件
temp.delete();
// 此处是获得返回的数据,总之 这个里面有返回的数据, 很好拿到
String responseObject = EntityUtils.toString( httpResponse.getEntity());
//返回一个json?? 不太懂, 也没去找是否有更好的方法,因为之前的工作不需要我来写了
JSONObject responseJSONObject = JSONObject.parseObject(responseObject);
if ("0".equals(responseJSONObject.get("code").toString())) {
System.out.println(responseJSONObject);
return R.ok().put("url", responseJSONObject.get("url"));
}
}
} catch (IOException e) {
e.printStackTrace();
}
附加另一种转码base64,之前没有找到,所以是复制的
这个可以直接用来转码
//Base64解码
final Base64.Decoder decoder = Base64.getDecoder();
byte[] b = decoder.decode(imageStr);//imageStr 为需要解码的base64串
//可直接转为流
InputStream inputStream = new ByteArrayInputStream(b);