将.zip文件转换成字符串进行传送(以支付宝对账单为例)
本例主要是将.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-06String 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_业务明细(汇总).csvInputStream 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文件转换成字符串进行传送(以支付宝对账单为例)相关推荐
- 将.zip文件转换成字符串进行传送(以支付宝对账单为例
转载自:http://blog.csdn.net/myfmyfmyfmyf/article/details/52517187 本例主要是将.zip的压缩文件,转换成string类型,进数据传送.有的读 ...
- 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位无符号 ...
最新文章
- convertViewsetTag方法的一点理解
- 商汤联手华科:提出文字检测模型GNNets,新颖模块可解决几何分布难题
- 京东主图怎么保存原图_京东自营怎么做?详解京东平台操作方法
- CSS进阶(7)—— 内联元素的掌管者line-height和vertical-align(上)
- java jxl map,jxl操作Excel
- java如何造假数据_JAVA时间数据造假
- HBase性能优化总结
- JBox2D和JavaFX:事件与力量
- 砂.随笔.二十.微笑
- Python3.5安装与ChatterBot聊天机器人使用
- 杭电2151 Worm dp
- oracle时间差转换成小时分钟,oracle 时间差 具体到天:小时:分
- 各种厂商打开bios按键总汇
- 融合非负矩阵分解和图全变分的歌曲推荐算法
- linux 自动ping脚本,ping自动报警shell脚本forlinux
- 稀疏分解中的MP与OMP算法
- Python下载所有XKCD漫画
- 解决eclipse桌面快捷方式打不开的问题
- 企业如何CRM管理软件中受益
- 简单的复习下箭头函式