发表于: 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 文件!




返回列表 返回列表
评论

    分享到