java 二进制流转图片_java转发二进制图片流【原】
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转发二进制图片流【原】相关推荐
- java 生成纯色图片_java实现切图并且判断图片是不是纯色/彩色图片
java实现切图并且判断图片是不是纯色/彩色图片 发布时间:2020-08-30 15:45:30 来源:脚本之家 阅读:92 作者:点墨花花 整理文档,搜刮出一个java实现切图并且判断图片是否是纯 ...
- java 二进制加法运算_java实现二进制的加法
先看打印结果在看代码比较好理解.结果在最下面的位置. 总结:讲解了二进制的按位异域.按位与.左移的运算规则.并通过次3种算法得到2个数相加的结果.二进制应该还有其他算法,由于知识浅薄就不知道了. 代码 ...
- java添加背景图片_Java怎么添加背景图片
首先,导入相关的包: import java.awt.BorderLayout; import java.awt.Container; import javax.swing.ImageIcon; im ...
- java 多线程下载图片_java多线程实现下载图片并压缩
最近在做一个需求:从其他系统的ftp目录下载存储图片url的文件,然后读取文件中的url地址,根据地址下载图片后按天压缩成一个包,平均一个地址文件中包含4000个地址左右,也就是说一个文件扫描后需要下 ...
- python将图片转为二进制_python 图片 数组到二进制的互相转换
需要导入以下包,没有的通过pip安装 import matplotlib.pyplot as plt import cv2 from PIL import Image from io import B ...
- (Java实现)图片合成GIF动图(“复古”Swing界面)
1.项目简介 项目名称:pic2gif 项目实现:将选定的几张图片(支持jpg,png,bmp,gif等) 合成为一张gif图 关键字:图片处理,Java,Swing 2.项目结构 图片处理部分 Sw ...
- php读取图片输出,php读取图片流输出到页面图片
读取图片流代码 @ header("Content-Type:image/png"); $imagespath = $_GET['imagespath']; $vms_ini_pa ...
- java流转图片_java 二进制流转换为图片
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import sun.misc.BA ...
- python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程
教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...
最新文章
- c++标准库获取随机数
- atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
- 【C++ STL学习之六】STL算法之for_each
- 为什么用openstack_如何为OpenStack贡献力量
- 【SENCHA TOUCH】picker的使用
- 用Unity3D实现打飞碟游戏
- 箱线图Boxplot-统计学解读
- iphone android传照片大小,快速地将iPhone/Android的照片传到电脑上
- scala trait ,abstract class,case class,class 的一些琐碎注意事项,仅针对3.0以下
- openwrt配置内核驱动_OpenWrt添加驱动模块
- 2021年安全生产模拟考试(建筑起重机司机-物料提升机模拟考试题库)安考星
- 一种控制方法并发的注解方法,@Ylock
- 单稳态触发器(cmos门电路构成)-微分型
- 美化QTabWidget
- 文档编号与文档版本号的作用
- 支付宝企业账户支付接口申请-移动支付
- win10系统微软自带的输入法不显示选字框怎么办
- 面经分享!30+场CV面试后总结的常见问题合集
- C++与QML混合编程技术(传递自定义数据类型)
- element表格错位问题(表头和表格内容没有对齐)解决办法
热门文章
- linux 误删nginx.conf文件恢复
- 知识库的分类梳理原则与实践经验
- 查看达梦数据库表中的数据为乱码解决
- 一位顽强的女孩!(强烈推荐-看完泪流满面)
- C语言编程>第九周 ④ 编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(y)-y=0的一个实根。yn+1=cos(yn)
- 一文了解在职提升专、本科还有多少途径?
- 第七章---内置模块
- 计算机信息计量单位 英文名称byte,5.计算机中的字节是个常用的单位,它的英文名字为( )。...
- Mac说——关闭SIP
- android 旋钮控件,Android自定义控件 温度旋转按钮