调用图片上传http接口,利用httpClient模拟请求

本文介绍了一种使用HTTPClient实现图片远程上传的方法。通过构造HTTP Post请求,并利用FilePart类处理文件,最终完成向目标服务器上传图片的过程。文章还详细展示了如何处理上传过程中的各种异常情况。

上传图片除了上传到本地服务器之外,通常需要上传到对方的服务器中,这时候除了上传到我们本地然后做NFS之外(比较不合理),还需要直接捅对方接口,直接将文件上传到对方服务器,这时候就需要利用httpclient来模拟一个图片上传请求。


public static JSONObject postImg(String url, File savedDir,
String saveFileName) {


HttpClient client = new HttpClient();
// 返回结果集
JSONObject resJson = new JSONObject();


try {
// 判断白村文件存不存在
if (!savedDir.exists()) {
resJson.put("status", "-1");
resJson.put("msg", "保存文件不存在");
return resJson;
}
PostMethod postMethod = new PostMethod(url);


// FilePart:用来上传文件的类
FilePart filePart = new FilePart("img", new File(savedDir,
saveFileName));
Part[] parts = { filePart };
// 对于MIME类型的请求,httpclient建议全用MulitPartRequestEntity进行包装
MultipartRequestEntity mre = new MultipartRequestEntity(parts,
postMethod.getParams());
postMethod.setRequestEntity(mre);


// 执行请求,返回状态码
int status = client.executeMethod(postMethod);


if (status == HttpStatus.SC_OK) {
LOG.info("上传到易信服务器请求成功,返回信息:"
+ postMethod.getResponseBodyAsString());
String result = postMethod.getResponseBodyAsString();
if (result != null && !result.trim().equals("")) {
// 解析返回信息
resJson = JSONObject.parseObject(result);
String code = resJson.get("errcode").toString(); // 对方接口请求返回结果:0成功
// 其余失败
if (code != null && code.trim().equals("0")) {
LOG.info("上传成功。返回信息:"
+ postMethod.getResponseBodyAsString());
resJson.put("status", "0");
return resJson;
} else {
LOG.info("上传失败。返回信息:" + resJson.get("msg").toString());
resJson.put("status", "-1");
return resJson;
}
}
} else {
LOG.info("请求易信接口上传图片,请求失败。");
resJson.put("status", "-1");
resJson.put("msg", "上传图片,请求失败。");
return resJson;
}
} catch (Exception e) {
resJson.put("status", "-1");
resJson.put("msg", "系统异常");
return resJson;
}
return null;
}

使用springboot做基础框架,提供简单页面做图片上传接口直接模拟微博登陆,上传完成后返回图片保存链接 public String getSinaCookies() { String base64name = Base64Utils.encodeToString(username.getBytes()); String loginUrl = "https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543"; String params = "entry=sso&gateway=1&from=null&savestate=30&useticket=0&pagerefer;=&vsnf=1&su;=" + base64name; params += "&service=sso&sp;=" + password + "&sr=1920*1080&encoding=UTF-8&cdult=3&domain=sina.com.cn&prelt=0&returntype=TEXT"; //登录 try { URL url = new URL(loginUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); OutputStream out = conn.getOutputStream(); out.write(params.getBytes()); out.flush(); out.close(); String sessionId = ""; String cookieVal = ""; String key = null; //取cookie for (int i = 1; (key = conn.getHeaderFieldKey(i)) != null; i++) { if (key.equalsIgnoreCase("set-cookie")) { cookieVal = conn.getHeaderField(i); cookieVal = cookieVal.substring(0, cookieVal.indexOf(";")); sessionId = sessionId + cookieVal + ";"; } } if (sessionId != null) { String[] cookiearr = sessionId.split(";"); for (int i = 0; i < cookiearr.length; i++) { if (cookiearr[i].startsWith("SUB") && !cookiearr[i].startsWith("SUBP")) { sessionId = cookiearr[i] + ";"; } } } return sessionId; } catch (Exception e) { e.printStackTrace(); return null; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有一只柴犬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值