发表于: 2017-11-20 22:53:21
1 639
今天做的事:
今天遇到了,传说中的,男人每个月都有的那么几天了,心情异常低落,什么都不想做,感觉整个世界都索然无味,很难受。
挣扎着把微信图片上传写了(其实就是照着真实里面的内容抄的。。)
也没什么东西,贴一下代码解释一下吧
/**
* 通过mediaId获取输入流
* @param accessToken
* @param mediaId
* */
public InputStream getInputStream(String mediaId, String accessToken){
log.info("============> get in WeChatPicture.getInputStream()");
log.info("mediaId : " + mediaId + " accessToken : " + accessToken);
String mediaUrl = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=" + accessToken + "&media_id=" + mediaId;
InputStream is = null;
try{
URL urlGet = new URL(mediaUrl);
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET"); // 必须是get方式请求
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
http.connect();
// 获取文件转化为byte流
is = http.getInputStream();
}catch (Exception e){
e.printStackTrace();
}
return is;
}
这个方法是通过mediaID和AccessToken发送GET请求到微信那面,然后获得一个输入流(就是微信的返回信息)
/**
* 通过mediaID下载文件并且上传到葡萄藤金山云服务器(.jpg)
* @param mediaId
* @param accessToken
* */
public String postPictureToJinShanYun(String mediaId,String accessToken) throws Exception{
String filePath = "";
String fileName = "";
String module = "weChat";
log.info("save image by mediaId : " + mediaId);
InputStream inputStream = getInputStream(mediaId,accessToken);
byte[] data = new byte[1024];
int len = 0;
FileOutputStream fileOutputStream = null;
try{
fileName = UUID.randomUUID().toString() + ".jpg";
log.info("new file name : " + fileName);
filePath = "/data/temp/" + fileName;
log.info("file path : " + filePath);
fileOutputStream = new FileOutputStream(filePath);
while((len = inputStream.read(data)) != -1){
fileOutputStream.write(data,0,len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
if(inputStream != null){
try{
inputStream.close();
}catch (IOException e1){
e1.printStackTrace();
}
}
if(fileOutputStream != null){
try{
fileOutputStream.close();
}catch (IOException e2){
e2.printStackTrace();
}
}
}
File file = new File(filePath);
if(file.exists()){
log.info("file exist");
}else {
log.info("file not exist");
}
String url = this.imgStorageUtil.imgStorage(module,module + "/" + fileName,filePath);
log.info(module + " upload success ,and file name is " + fileName + "temp path is " + filePath + " access url is " + url);
file.delete();
log.info(file.getName() + " delete success ");
return url;
}
这个方法的主题内容就是,将之前获得的输入流,写入到一个文件中,然后再通过公司的工具类上传到金山云的服务器里,返回一个可用的url。
但是由于前端暂时获取不到mediaId,所以没法测试这个接口是否管用,而且我也有点疑问。
目前不清楚的是,InputStream接受到的流,是否是图片的二进制内容,里面有没有包含响应头和响应体;如果包含响应头,那么直接写入文件,岂不是多了东西;如果不包含响应头,那么在响应体中的boundary是如何处理的,在接受到转换的时候自动过滤了吗?会不会也写到文件里,导致最后的url没有效果。
所以这一切还是需要通过测试验证,现在都是空想。。。
然后说好的写刷新AccessToken,结果也没写,因为本来放弃的http POST文件,突然又想尝试一下,结果心态彻底崩了,这也是今天心情不好的最主要原因。
我真的放弃了,我再刚下去,不是我死就是我死的,还是以后再处理这里的问题吧,现在道行太浅,真的受不了打击。
明天计划:把刷新AccessToken写了,然后把用户登陆接口写个雏形,再把之前和微信有关的整合到项目里,这样,项目基本就差不多了,可以和阿飞先看后台模块管理了,然后等前端那面微信可用,就可以测试了。
问题:心态爆炸
收获:如何正确调整心态,就是该放弃的时候就要放弃。做人不能太倔,该放手放手,等我以后牛逼了,我再回来征服你,http POST 文件!
评论