将.zip文件转换成字符串进行传送(以支付宝对账单为例
转载自:http://blog.csdn.net/myfmyfmyfmyf/article/details/52517187
本例主要是将.zip的压缩文件,转换成string类型,进数据传送。有的读者要问干嘛不用stream流呢,可以用流,现在不支持流又该怎么弄呢,可以用byte[],那byte[]也不支持呢,那就乖乖用String吧。
主要思想是通过byte[]将文件类型转换成String类型,有以下几种方式:
注意:不要直接toString()
方法一:
byte[]转String
byte[] temp = new byte[1024];
int b;
while ((b = fis.read(temp)) != -1) {
outstream.write(temp, 0, b);
}
String转byte[]
fileStr.getBytes("ISO-8859-1")
方法二:
BASE64Encoder encoder = new BASE64Encoder();
while ((b = inputstream.read(temp)) != -1) {
fileStr+= encoder.encode(temp);
}
String转byte[]
BASE64Decoder decoder = new BASE64Decoder();
byte[] appByte = decoder.decodeBuffer(fileStr);
ftpOutstream.write(appByte);
方法三:
读者自己写转换吧
本编博客以支付宝的电子对账单为例,奇怪的是电子对账单直接用支付宝流转成string,居然出错,最后一个文件错误,大小不变文件却缺失,没办法只能先保存在本地,然后读取本地文件流,用完再删除了,代码在下面↓↓↓↓↓↓↓↓↓↓↓↓
- package com.pay;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.zip.ZipOutputStream;
- import javax.servlet.http.HttpServletResponse;
- import net.sf.json.JSONObject;
- import org.codehaus.jackson.map.ObjectMapper;
- import sun.misc.BASE64Decoder;
- import sun.misc.BASE64Encoder;
- import com.alipay.api.AlipayClient;
- import com.alipay.api.DefaultAlipayClient;
- import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
- import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
- import com.log.AppLogUtil;
- import com.service.ReceiverHandler;
- /**
- * @author muyunfei
- *
- * <p>Modification History:</p>
- * <p>QQ Author Description</p>
- * <p>------------------------------------------------------------------</p>
- * <p>1147417467 牟云飞 新建</p>
- */
- public class AliZipDemo{
- /**
- * 获得对账单数据流(.zip),并将.zip通过byte[]保存成string进行传送
- * String获得后转成byte[],然后保存成.zip
- */
- public String sendZipByStr() {
- try{
- String aliGateWay="https://openapi.alipay.com/gateway.do";//支付宝网关
- String dateStr="2016-09-09";//日期 以天为最低单位 2016-09-06
- String appId="***********";//appid
- //商户私钥
- String privateKey="********************************************************";
- String strType="json";//数据格式
- String chartType="utf-8";//编码格式
- //支付宝公钥
- String aliPublicKey="************************************************";
- AlipayClient alipayClient = new DefaultAlipayClient(aliGateWay,appId,privateKey,strType,chartType,aliPublicKey);
- AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();
- request.setBizContent("{" +
- " \"bill_type\":\"trade\"," +
- " \"bill_date\":\""+dateStr+"\"" +
- " }");
- AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);
- //获得下载对账单地址
- System.out.println(response.getBillDownloadUrl());
- System.out.println(response.getCode());
- System.out.println(response.getMsg());
- if(response.isSuccess()){
- //调用成功,下载对账文件
- String urlStr=response.getBillDownloadUrl();
- try {
- //创建文件链接
- // URL url = new URL("https://zos.alipayobjects.com/rmsportal/sDdxhkwUKuHUDLe.png");
- URL url = new URL(urlStr);
- HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
- //设置链接参数
- httpUrlConnection.setConnectTimeout(5 * 1000);
- httpUrlConnection.setDoInput(true);//打开输入输出流
- httpUrlConnection.setDoOutput(true);
- httpUrlConnection.setUseCaches(false);
- httpUrlConnection.setRequestMethod("GET");
- httpUrlConnection.setRequestProperty("Charsert", "UTF-8");
- httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");
- //建立链接
- httpUrlConnection.connect();
- //获得输入流,文件为zip格式,
- //支付宝提供
- //20886126836996110156_20160906.csv.zip内包含
- //20886126836996110156_20160906_业务明细.csv
- //20886126836996110156_20160906_业务明细(汇总).csv
- InputStream fis = httpUrlConnection.getInputStream();
- //从url中获得文件名downloadFileName=20886126836996110156_20160909.csv.zip
- //直接将流转换成字符串出现zip内最后一个文件异常,只能先保存到本地,然后进行转换
- String filename=getDownloadFileName(urlStr);
- File file = new File(filename+".zip");
- FileOutputStream outstream = new FileOutputStream(file);
- //将获得数据流转换成byte,然后转成String,向内网传送
- byte[] temp = new byte[1024];
- int b;
- while ((b = fis.read(temp)) != -1) {
- // fileStr+=byte2hex(temp);
- // fileStr+=new String(temp,"ISO-8859-1");
- outstream.write(temp, 0, b);
- }
- outstream.flush();
- outstream.close();
- fis.close();
- //获取本地文件转换成字符换
- File file2 = new File(filename+".zip");
- FileInputStream inputstream=new FileInputStream(file2);//本地文件的输入流
- String fileStr="";//内网传送数据,file的转byte的字符串
- BASE64Encoder encoder = new BASE64Encoder();
- while ((b = inputstream.read(temp)) != -1) {
- fileStr+= encoder.encode(temp);
- }
- inputstream.close();
- System.out.println("文件1:"+fileStr);
- //删除本地文件
- file2.delete();
- //测试保存文件
- File ftpfile=new File("G:/"+filename+"2222222222222.zip");
- FileOutputStream ftpOutstream = new FileOutputStream(ftpfile);
- BASE64Decoder decoder = new BASE64Decoder();
- byte[] appByte = decoder.decodeBuffer(fileStr);
- ftpOutstream.write(appByte);
- // outstream.write(fileStr.getBytes("ISO-8859-1"));
- ftpOutstream.flush();
- ftpOutstream.close();
- System.out.println("ok");
- //成功向内网传送
- return "{\"code\": 1,\"result\": \""+fileStr+"\"}";
- } catch (Exception e) {
- AppLogUtil.getAppLoger().error("从支付宝获取对账单,根据对账单地址获取对账单异常:" + e.getMessage());
- e.printStackTrace();
- return createErrorMsg("fail").toString();
- }
- } else {
- AppLogUtil.getAppLoger().error("从支付宝获取对账单,获取对账单地址失败");
- return createErrorMsg("fail").toString();
- }
- }catch(Exception e){
- AppLogUtil.getAppLoger().error("从支付宝获取对账单,获取对账单地址失败:" + e.getMessage());
- e.printStackTrace();
- return createErrorMsg("fail").toString();
- }
- }
- /**
- * 生成错误信息
- * @param msg
- * @return
- */
- private JSONObject createErrorMsg(String msg){
- String error="{\"code\": 1,\"result\": \""+msg+"\"}";
- return JSONObject.fromObject(error) ;
- }
- <span style="white-space:pre"> </span>//获取文件名
- private String getDownloadFileName(String urlStr){
- String tempStr = urlStr.substring(urlStr.indexOf("downloadFileName")+17, urlStr.length());
- tempStr = tempStr.substring(0,tempStr.indexOf(".zip"));
- return tempStr;
- }
- }
- 自己总结如下:====由zip文件获取base64字符串的工具类
public class GetBytesFromFileUtils { public static String getBase64StringFromZip(String pathname) throws IOException { File f = new File(pathname); FileInputStream is = null; String fileStr = null; try { is = new FileInputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder(); byte[] temp = new byte[1024]; int b; while ((b = is.read(temp)) != -1) { fileStr+= encoder.encode(temp); } return fileStr; }}
转载于:https://www.cnblogs.com/xzhuan/articles/zipbase64.html
将.zip文件转换成字符串进行传送(以支付宝对账单为例相关推荐
- 将.zip文件转换成字符串进行传送(以支付宝对账单为例)
本例主要是将.zip的压缩文件,转换成string类型,进数据传送.有的读者要问干嘛不用stream流呢,可以用流,现在不支持流又该怎么弄呢,可以用byte[],那byte[]也不支持呢,那就乖乖用S ...
- XML文件转换成字符串互相转换操作
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();//新建对象 doc.Load("filePath");//XM ...
- python excel文件转换成字符串_python利用pandas将excel文件转换为txt文件的方法
python将数据换为txt的方法有很多,可以用xlrd库实现.本人比较懒,不想按太多用的少的插件,利用已有库pandas将excel文件转换为txt文件. 直接上代码: ''' function:将 ...
- 将文件转换成二进制,再由二进制转换成文件
//首先引入命名空间 using System.IO; protected void Page_Load(object sender, EventArgs e){//调用以下两个方法进行转换strin ...
- 怎样将英文html文件转换成中文乱码,解决html导出pdf中文乱码问题的正确姿势
简介 jspdf是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非英文的文本都是乱码. 因此就有其他大佬给增加了其他解决方案,到了1.5版本也正式加入了非英文支持的解决方案. 解决 ...
- bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...
使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件 文章来源与博主本人的CSDN博客,博客地址:https://blog.csdn.net/weixin_435 ...
- python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...
- oracle转换成字符型,Oracle中将Clob字段转换成字符串
1. 利用dbms_lob.substr()方法可将对应字段转换成字符串如下 select dbms_lob.substr(content) from NEWS 该方法有个缺点,当content字段长 ...
- ip地址转换成字符串
from://http://hi.baidu.com/hst_jiangbo/item/2a66d8eadeacb3215b2d643a 从网络上接收的ip地址,有时候为了节省空间,用一个32位无符号 ...
最新文章
- jmeter--入参为json类型
- jQuery之选项卡的实现
- c语言 题目 猜算式,蓝桥杯竞赛题目(猜算式)
- ArcGIS实验教程——实验九:矢量数据提取
- css动态阴影,css实现动态阴影、蚀刻文本、渐变文本效果
- hdu 3507 Print Article(dp+斜率优化)
- 搭建mock-server
- 详解MySQL中EXPLAIN解释命令(转)
- 蚂蚁可信原生负责人入选“2021年度全球青年领袖”名单
- 2010年08期《程序员》配套源码及相关链接
- 利用project编制进度计划
- 第1课-如何有效学习和训练算法和数据结构
- 多无线路由器AP使用同一个SSID号无缝连接漫游
- PDF图标异常的解决方法
- [思语]_我的人生理念
- 2022年苹果二手报价最新
- 公众号文章同步到其它平台方法
- Advanced machine-learning techniques in drug discovery
- springmvc(四) springmvc的数据校验的实现
- 安全常识 厨房这根管子祸害了很多家庭 一定要注意