转载自: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,居然出错,最后一个文件错误,大小不变文件却缺失,没办法只能先保存在本地,然后读取本地文件流,用完再删除了,代码在下面↓↓↓↓↓↓↓↓↓↓↓↓

[java] view plain copy
  1. package com.pay;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.zip.ZipOutputStream;
  12. import javax.servlet.http.HttpServletResponse;
  13. import net.sf.json.JSONObject;
  14. import org.codehaus.jackson.map.ObjectMapper;
  15. import sun.misc.BASE64Decoder;
  16. import sun.misc.BASE64Encoder;
  17. import com.alipay.api.AlipayClient;
  18. import com.alipay.api.DefaultAlipayClient;
  19. import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
  20. import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
  21. import com.log.AppLogUtil;
  22. import com.service.ReceiverHandler;
  23. /**
  24. * @author muyunfei
  25. *
  26. * <p>Modification History:</p>
  27. * <p>QQ       Author      Description</p>
  28. * <p>------------------------------------------------------------------</p>
  29. * <p>1147417467           牟云飞             新建</p>
  30. */
  31. public class AliZipDemo{
  32. /**
  33. * 获得对账单数据流(.zip),并将.zip通过byte[]保存成string进行传送
  34. * String获得后转成byte[],然后保存成.zip
  35. */
  36. public String sendZipByStr() {
  37. try{
  38. String aliGateWay="https://openapi.alipay.com/gateway.do";//支付宝网关
  39. String dateStr="2016-09-09";//日期  以天为最低单位  2016-09-06
  40. String appId="***********";//appid
  41. //商户私钥
  42. String privateKey="********************************************************";
  43. String strType="json";//数据格式
  44. String chartType="utf-8";//编码格式
  45. //支付宝公钥
  46. String aliPublicKey="************************************************";
  47. AlipayClient alipayClient = new DefaultAlipayClient(aliGateWay,appId,privateKey,strType,chartType,aliPublicKey);
  48. AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();
  49. request.setBizContent("{" +
  50. "    \"bill_type\":\"trade\"," +
  51. "    \"bill_date\":\""+dateStr+"\"" +
  52. "  }");
  53. AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);
  54. //获得下载对账单地址
  55. System.out.println(response.getBillDownloadUrl());
  56. System.out.println(response.getCode());
  57. System.out.println(response.getMsg());
  58. if(response.isSuccess()){
  59. //调用成功,下载对账文件
  60. String urlStr=response.getBillDownloadUrl();
  61. try {
  62. //创建文件链接
  63. //                  URL url = new URL("https://zos.alipayobjects.com/rmsportal/sDdxhkwUKuHUDLe.png");
  64. URL url = new URL(urlStr);
  65. HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
  66. //设置链接参数
  67. httpUrlConnection.setConnectTimeout(5 * 1000);
  68. httpUrlConnection.setDoInput(true);//打开输入输出流
  69. httpUrlConnection.setDoOutput(true);
  70. httpUrlConnection.setUseCaches(false);
  71. httpUrlConnection.setRequestMethod("GET");
  72. httpUrlConnection.setRequestProperty("Charsert", "UTF-8");
  73. httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");
  74. //建立链接
  75. httpUrlConnection.connect();
  76. //获得输入流,文件为zip格式,
  77. //支付宝提供
  78. //20886126836996110156_20160906.csv.zip内包含
  79. //20886126836996110156_20160906_业务明细.csv
  80. //20886126836996110156_20160906_业务明细(汇总).csv
  81. InputStream fis = httpUrlConnection.getInputStream();
  82. //从url中获得文件名downloadFileName=20886126836996110156_20160909.csv.zip
  83. //直接将流转换成字符串出现zip内最后一个文件异常,只能先保存到本地,然后进行转换
  84. String filename=getDownloadFileName(urlStr);
  85. File file = new File(filename+".zip");
  86. FileOutputStream outstream = new FileOutputStream(file);
  87. //将获得数据流转换成byte,然后转成String,向内网传送
  88. byte[] temp = new byte[1024];
  89. int b;
  90. while ((b = fis.read(temp)) != -1) {
  91. //                      fileStr+=byte2hex(temp);
  92. //                      fileStr+=new String(temp,"ISO-8859-1");
  93. outstream.write(temp, 0, b);
  94. }
  95. outstream.flush();
  96. outstream.close();
  97. fis.close();
  98. //获取本地文件转换成字符换
  99. File file2 = new File(filename+".zip");
  100. FileInputStream inputstream=new FileInputStream(file2);//本地文件的输入流
  101. String fileStr="";//内网传送数据,file的转byte的字符串
  102. BASE64Encoder encoder = new BASE64Encoder();
  103. while ((b = inputstream.read(temp)) != -1) {
  104. fileStr+= encoder.encode(temp);
  105. }
  106. inputstream.close();
  107. System.out.println("文件1:"+fileStr);
  108. //删除本地文件
  109. file2.delete();
  110. //测试保存文件
  111. File ftpfile=new File("G:/"+filename+"2222222222222.zip");
  112. FileOutputStream ftpOutstream = new FileOutputStream(ftpfile);
  113. BASE64Decoder decoder = new BASE64Decoder();
  114. byte[] appByte = decoder.decodeBuffer(fileStr);
  115. ftpOutstream.write(appByte);
  116. //                  outstream.write(fileStr.getBytes("ISO-8859-1"));
  117. ftpOutstream.flush();
  118. ftpOutstream.close();
  119. System.out.println("ok");
  120. //成功向内网传送
  121. return "{\"code\": 1,\"result\": \""+fileStr+"\"}";
  122. } catch (Exception e) {
  123. AppLogUtil.getAppLoger().error("从支付宝获取对账单,根据对账单地址获取对账单异常:" + e.getMessage());
  124. e.printStackTrace();
  125. return createErrorMsg("fail").toString();
  126. }
  127. } else {
  128. AppLogUtil.getAppLoger().error("从支付宝获取对账单,获取对账单地址失败");
  129. return createErrorMsg("fail").toString();
  130. }
  131. }catch(Exception e){
  132. AppLogUtil.getAppLoger().error("从支付宝获取对账单,获取对账单地址失败:" + e.getMessage());
  133. e.printStackTrace();
  134. return createErrorMsg("fail").toString();
  135. }
  136. }
  137. /**
  138. * 生成错误信息
  139. * @param msg
  140. * @return
  141. */
  142. private JSONObject createErrorMsg(String msg){
  143. String error="{\"code\": 1,\"result\": \""+msg+"\"}";
  144. return JSONObject.fromObject(error) ;
  145. }
  146. <span style="white-space:pre">    </span>//获取文件名
  147. private String getDownloadFileName(String urlStr){
  148. String tempStr = urlStr.substring(urlStr.indexOf("downloadFileName")+17, urlStr.length());
  149. tempStr = tempStr.substring(0,tempStr.indexOf(".zip"));
  150. return tempStr;
  151. }
  152. }
  153. 自己总结如下:====由zip文件获取base64字符串的工具类
  154. 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文件转换成字符串进行传送(以支付宝对账单为例相关推荐

  1. 将.zip文件转换成字符串进行传送(以支付宝对账单为例)

    本例主要是将.zip的压缩文件,转换成string类型,进数据传送.有的读者要问干嘛不用stream流呢,可以用流,现在不支持流又该怎么弄呢,可以用byte[],那byte[]也不支持呢,那就乖乖用S ...

  2. XML文件转换成字符串互相转换操作

    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();//新建对象 doc.Load("filePath");//XM ...

  3. python excel文件转换成字符串_python利用pandas将excel文件转换为txt文件的方法

    python将数据换为txt的方法有很多,可以用xlrd库实现.本人比较懒,不想按太多用的少的插件,利用已有库pandas将excel文件转换为txt文件. 直接上代码: ''' function:将 ...

  4. 将文件转换成二进制,再由二进制转换成文件

    //首先引入命名空间 using System.IO; protected void Page_Load(object sender, EventArgs e){//调用以下两个方法进行转换strin ...

  5. 怎样将英文html文件转换成中文乱码,解决html导出pdf中文乱码问题的正确姿势

    简介 jspdf是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非英文的文本都是乱码. 因此就有其他大佬给增加了其他解决方案,到了1.5版本也正式加入了非英文支持的解决方案. 解决 ...

  6. bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...

    使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件 文章来源与博主本人的CSDN博客,博客地址:https://blog.csdn.net/weixin_435 ...

  7. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  8. oracle转换成字符型,Oracle中将Clob字段转换成字符串

    1. 利用dbms_lob.substr()方法可将对应字段转换成字符串如下 select dbms_lob.substr(content) from NEWS 该方法有个缺点,当content字段长 ...

  9. ip地址转换成字符串

    from://http://hi.baidu.com/hst_jiangbo/item/2a66d8eadeacb3215b2d643a 从网络上接收的ip地址,有时候为了节省空间,用一个32位无符号 ...

最新文章

  1. jmeter--入参为json类型
  2. jQuery之选项卡的实现
  3. c语言 题目 猜算式,蓝桥杯竞赛题目(猜算式)
  4. ArcGIS实验教程——实验九:矢量数据提取
  5. css动态阴影,css实现动态阴影、蚀刻文本、渐变文本效果
  6. hdu 3507 Print Article(dp+斜率优化)
  7. 搭建mock-server
  8. 详解MySQL中EXPLAIN解释命令(转)
  9. 蚂蚁可信原生负责人入选“2021年度全球青年领袖”名单
  10. 2010年08期《程序员》配套源码及相关链接
  11. 利用project编制进度计划
  12. 第1课-如何有效学习和训练算法和数据结构
  13. 多无线路由器AP使用同一个SSID号无缝连接漫游
  14. PDF图标异常的解决方法
  15. [思语]_我的人生理念
  16. 2022年苹果二手报价最新
  17. 公众号文章同步到其它平台方法
  18. Advanced machine-learning techniques in drug discovery
  19. springmvc(四) springmvc的数据校验的实现
  20. 安全常识 厨房这根管子祸害了很多家庭 一定要注意

热门文章

  1. excel动态拼接sql语句
  2. matlab 直流电动机反接制动,直流电动机制动状态的Matlab仿真
  3. 19.错误(error)
  4. 关于Segmentation fault(段错误)探究
  5. 模电学习笔记(上交郑老师)10.放大电路Q点的稳定
  6. 萌新初学python
  7. 一个垃圾佬的自我修养(一)工作站篇
  8. 基于标签的网络入侵问题
  9. 冠铭机器人_优必选宣布冠名《铁甲雄心Ⅱ》 并联合创客星球推出机器人挑战赛...
  10. linux下非root用户获得/dev/ttyUSB0的权限