packagecom.rosellete.iescp.cshop.tool.http;importjavax.servlet.http.HttpServletResponse;import java.io.*;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.Date;/*** http post发送工具,用于接收二进行文件流

* 该工具类一次性使用,不建议复用,专门针对微信post请求返回图片二进制流的功能进行了定制化处理,如果异常微信还可能会返回json串

*@authorKing*/

public classWxQrCoodTool {private static final String DEFAULT_CHARSET = "utf-8";public static void main(String[] args) throwsException {

String requestUrl= "http://i.ce.cn/ce/img4/jrwx.jpg";byte[] resultsArray = WxQrCoodTool.sendRequestData(requestUrl,"requestData", "GBK", "GBK", 3000, 3000);//大家最终只要使用这一句代码就可调用

WxQrCoodTool.writeImageToFile(resultsArray,"C:\\Users\\King\\Desktop\\iescp-cshopadmin-activity-boot\\aaaaaa123456789.png");

}/*** 发送报文

*

*@paramappName 应用系统英文名

*@paramrequestData 请求报文

*@paramurlStr 请求地址

*@paramconnectionTimeout 链接超时时间 1000代表 1秒

*@paramreadTimeout 读取超时时间 1000代表1秒

*@return*@throwsIOException

*@authorKing*/

public static byte[] sendRequestData(String urlStr, String requestData, String sendEncoding, String recvEncoding, int connectionTimeout, int readTimeout) throwsIOException {

InputStream inputStream= null;

ByteArrayOutputStream byteArrayOutputStream= null;byte[] buff = new byte[1024];int len = 0;

URL url= null;

HttpURLConnection conn= null;

ByteArrayOutputStream byteOut= null;

BufferedReader readInfo= null;

StringBuffer strBuilder= newStringBuffer();

OutputStream outputStream= null;try{

System.out.println("请求时间:【" + new Date() + "】");

System.out.println("请求地址:【" + urlStr + "】");

System.out.println("请求报文:【" + requestData + "】");

url= newURL(urlStr);

conn=(HttpURLConnection) url.openConnection();

conn.setRequestMethod("POST");//conn.setRequestProperty("SOAPAction", "\"\"");//conn.setRequestProperty("Accept", "application/soap+xml, application/dime, multipart/related, text/*");//如果没有下面这一行代码,服务器端可以通过request.getParameter()和request.getInputStream()都接收到相同信息//conn.setRequestProperty("content-type", "text/xml;charset=GBK");//如果 有上面这一行代码,服务器端仅能通过request.getInputStream()接收信息//conn.setRequestProperty("User-Agent", "Axis/1.4");

conn.setRequestProperty("Cache-Control", "no-cache");

conn.setUseCaches(false); //忽略缓存

conn.setDoOutput(true); //使用 URL 连接进行输出

conn.setDoInput(true); //使用 URL 连接进行输入

conn.setConnectTimeout(connectionTimeout);//链接超时

conn.setReadTimeout(readTimeout);//读取超时

conn.connect();//建立链接

byteOut = newByteArrayOutputStream();

byteOut.write(requestData.getBytes(sendEncoding));//以指定编码发送,如果有乱码,修改之

byte[] buf =byteOut.toByteArray();

outputStream=conn.getOutputStream();

outputStream.write(buf);

outputStream.flush();

inputStream=conn.getInputStream();

byteArrayOutputStream= newByteArrayOutputStream();while ((len = inputStream.read(buff)) != -1) {

byteArrayOutputStream.write(buff,0, len);

}returnbyteArrayOutputStream.toByteArray();//if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {//正确返回//readInfo = new BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),recvEncoding));//以指定编码读取返回信息,如果有乱码,修改之//String line = null;//while ((line = readInfo.readLine()) != null) {//strBuilder.append(line);//}//} else {//没有正确返回//readInfo = new BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),recvEncoding));//以指定编码读取返回信息,如果有乱码,修改之//System.out.println("出现异常,返回报文:【"+readInfo+"】");//throw new IOException("url请求出现问题,返回编码:" + conn.getResponseCode());//}//System.out.println("返回时间:【"+new Date()+"】");//System.out.println("返回报文:【"+strBuilder.toString()+"】");

} catch(UnsupportedEncodingException e) {throwe;

}catch(MalformedURLException e) {throwe;

}catch(IOException e) {throwe;

}finally{try{if (readInfo != null) {

readInfo.close();

}if (byteOut != null) {

byteOut.close();

}if (outputStream != null) {

outputStream.close();

}if (inputStream != null) {

inputStream.close();

}if (byteArrayOutputStream != null) {

byteArrayOutputStream.close();

}if (conn != null) {

conn.disconnect();

}

}catch(Exception e) {

System.out.println("关闭链接出错!" +e.getMessage());

}

}//return strBuilder.toString();

}/***@paramfilePath 文件绝对路径

*@paramencoding 读取文件的编码

*@return*@throwsException

*@authorKing*/

public staticString readStringFromFile(String filePath, String encoding) {

File file= newFile(filePath);

System.out.println("文件 " + filePath + "存在与否?: " + file.exists() + "\n");

String tempLine= null;

String retStr= "";

InputStreamReader isr= null;//way1://FileReader fr = null;//way2

StringBuilder sb = newStringBuilder();try{if(file.exists()) {

isr= new InputStreamReader(new FileInputStream(file), encoding);//way1://fr = new FileReader(file);//way2

BufferedReader br = new BufferedReader(isr);//way1://BufferedReader br = new BufferedReader(fr);;//way2:

tempLine =br.readLine();while (tempLine != null) {

sb.append(tempLine);

tempLine=br.readLine();

}

retStr=sb.toString();

}

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{try{if (isr != null)

isr.close();

}catch(Exception e) {

e.printStackTrace();

}

}

System.out.println("读到的文件内容如下:");

System.out.println(retStr+ "\n");returnretStr;

}/*** 通过response返回图片

*

*@paramresponse

*@paramresultArray*/

public static void returnImage(byte[] resultArray, HttpServletResponse response) {

response.setContentType("image/png");

ByteArrayInputStream bais= newByteArrayInputStream(resultArray);

OutputStream outputStream= null;try{

outputStream=response.getOutputStream();//创建存放文件内容的数组

byte[] buff = new byte[1024];//所读取的内容使用n来接收

intn;//当没有读取完时,继续读取,循环

while ((n = bais.read(buff)) != -1) {//将字节数组的数据全部写入到输出流中

outputStream.write(buff, 0, n);

}//强制将缓存区的数据进行输出

outputStream.flush();//关流

outputStream.close();

}catch(IOException e) {

e.printStackTrace();

}finally{try{

bais.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}/*** 通过response返回图片*/

public static void writeImageToFile(byte[] resultArray, String path) {

ByteArrayInputStream bais= newByteArrayInputStream(resultArray);

OutputStream outputStream= null;try{

outputStream= newFileOutputStream(path);//创建存放文件内容的数组

byte[] buff = new byte[1024];//所读取的内容使用n来接收

intn;//当没有读取完时,继续读取,循环

while ((n = bais.read(buff)) != -1) {//将字节数组的数据全部写入到输出流中

outputStream.write(buff, 0, n);

}//强制将缓存区的数据进行输出

outputStream.flush();//关流

outputStream.close();

}catch(IOException e) {

e.printStackTrace();

}finally{if (outputStream != null) {try{

outputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}if (bais != null) {try{

bais.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

java 二进制流转图片_java转发二进制图片流【原】相关推荐

  1. java 生成纯色图片_java实现切图并且判断图片是不是纯色/彩色图片

    java实现切图并且判断图片是不是纯色/彩色图片 发布时间:2020-08-30 15:45:30 来源:脚本之家 阅读:92 作者:点墨花花 整理文档,搜刮出一个java实现切图并且判断图片是否是纯 ...

  2. java 二进制加法运算_java实现二进制的加法

    先看打印结果在看代码比较好理解.结果在最下面的位置. 总结:讲解了二进制的按位异域.按位与.左移的运算规则.并通过次3种算法得到2个数相加的结果.二进制应该还有其他算法,由于知识浅薄就不知道了. 代码 ...

  3. java添加背景图片_Java怎么添加背景图片

    首先,导入相关的包: import java.awt.BorderLayout; import java.awt.Container; import javax.swing.ImageIcon; im ...

  4. java 多线程下载图片_java多线程实现下载图片并压缩

    最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下 ...

  5. python将图片转为二进制_python 图片 数组到二进制的互相转换

    需要导入以下包,没有的通过pip安装 import matplotlib.pyplot as plt import cv2 from PIL import Image from io import B ...

  6. (Java实现)图片合成GIF动图(“复古”Swing界面)

    1.项目简介 项目名称:pic2gif 项目实现:将选定的几张图片(支持jpg,png,bmp,gif等) 合成为一张gif图 关键字:图片处理,Java,Swing 2.项目结构 图片处理部分 Sw ...

  7. php读取图片输出,php读取图片流输出到页面图片

    读取图片流代码 @ header("Content-Type:image/png"); $imagespath = $_GET['imagespath']; $vms_ini_pa ...

  8. java流转图片_java 二进制流转换为图片

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import sun.misc.BA ...

  9. python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程

    教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...

最新文章

  1. c++标准库获取随机数
  2. atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
  3. 【C++ STL学习之六】STL算法之for_each
  4. 为什么用openstack_如何为OpenStack贡献力量
  5. 【SENCHA TOUCH】picker的使用
  6. 用Unity3D实现打飞碟游戏
  7. 箱线图Boxplot-统计学解读
  8. iphone android传照片大小,快速地将iPhone/Android的照片传到电脑上
  9. scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下
  10. openwrt配置内核驱动_OpenWrt添加驱动模块
  11. 2021年安全生产模拟考试(建筑起重机司机-物料提升机模拟考试题库)安考星
  12. 一种控制方法并发的注解方法,@Ylock
  13. 单稳态触发器(cmos门电路构成)-微分型
  14. 美化QTabWidget
  15. 文档编号与文档版本号的作用
  16. 支付宝企业账户支付接口申请-移动支付
  17. win10系统微软自带的输入法不显示选字框怎么办
  18. 面经分享!30+场CV面试后总结的常见问题合集
  19. C++与QML混合编程技术(传递自定义数据类型)
  20. element表格错位问题(表头和表格内容没有对齐)解决办法

热门文章

  1. linux 误删nginx.conf文件恢复
  2. 知识库的分类梳理原则与实践经验
  3. 查看达梦数据库表中的数据为乱码解决
  4. 一位顽强的女孩!(强烈推荐-看完泪流满面)
  5. C语言编程>第九周 ④ 编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(y)-y=0的一个实根。yn+1=cos(yn)
  6. 一文了解在职提升专、本科还有多少途径?
  7. 第七章---内置模块
  8. 计算机信息计量单位 英文名称byte,5.计算机中的字节是个常用的单位,它的英文名字为( )。...
  9. Mac说——关闭SIP
  10. android 旋钮控件,Android自定义控件 温度旋转按钮