服务器以流的形式返回一个本地文件给请求方

来源:互联网 发布:关于c语言的书那本最好 编辑:程序博客网 时间:2024/06/05 03:34

服务器以流的形式返回一个本地文件给请求方


对于请求方来说,下载来的文件是透明的,就是这个文件的格式和名字都是需要重命名的,这是以流的形式下载文件的一个特点。


import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.codec.digest.DigestUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;public class FileTest {public static void main(String [] args){FileTest ft=new FileTest();ft.test1();}//----------------------------test1public void test1(){ActionContext ctx = ActionContext.getContext();HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);   HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);//声明流对象FileInputStream fis=null;String s="";try {//创建流对象fis=new FileInputStream("d:\\a\\123.txt");//读取数据,并将读取到的数据存储到数组中byte[] data=new byte[1024];//数据存储的数组int i=0;//当前下标//读取流中的第一个字节数据int n=fis.read();//依次读取后续的数据while(n!=-1){//未到达流的末尾//将有效数据存储到数组中data[i]=(byte)n;//下标增加i++;//读取下一个字节的数据n=fis.read();}//解析数据s=new String(data,0,i);//输出字符串System.out.println(s);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}response.setCharacterEncoding("UTF-8");// 解决接受端的中文乱码问题PrintWriter printWriter;try {printWriter = response.getWriter();printWriter.write(s);// 返回的json串printWriter.flush();printWriter.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//----------------------------test1//____________________________test2public void test2() throws Exception{String getURL="http://192.168.1.104:8080/struts2go/fileTest/test1.action;URL getUrl = new URL(getURL); // 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,// 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnectionHttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到// 服务器connection.setConnectTimeout(25000);connection.setReadTimeout(25000);connection.connect(); int status = connection.getResponseCode();         if (status == 200) {       DataInputStream in = new DataInputStream( connection.getInputStream());     DataOutputStream out = new DataOutputStream(new FileOutputStream("d:\\a\\新文件.zip"));      byte[] buffer = new byte[4096];        int count = 0;        while ((count = in.read(buffer)) > 0) {            out.write(buffer, 0, count);         }        out.close();        in.close();          } else {             String strResponse = "error";         }         connection.disconnect();}//____________________________test2}


0 0
原创粉丝点击