Struts2-Download

来源:互联网 发布:锁屏也能抢红包的软件 编辑:程序博客网 时间:2024/05/29 09:32

struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="down" extends="struts-default" namespace="/"><action name="down" class="itany.action.DownAction"><result name="success" type="stream"><param name="contentType">application/pdf</param><param name="inputName">pdfStream</param><!-- <param name="contentDisposition">attachment;filename="struts2.pdf"</param> --> <param name="contentDisposition">inline;filename="struts2文档.pdf"</param><param name="bufferSize">4096</param></result></action><action name="down1" class="itany.action.DownAction1"><result name="success" type="stream"><param name="contentType">image/jpeg</param><param name="inputName">imgStream</param><param name="contentDisposition">attachment;filename="${imagename}.jpg"</param> <!--  <param name="contentDisposition">inline;filename="mymotor.jpg"</param>--><param name="bufferSize">4096</param></result></action></package></struts>    



 

Download.java

package itany.action;import java.io.FileInputStream;import java.io.InputStream;import java.net.URLDecoder;import java.net.URLEncoder;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class DownAction extends ActionSupport { /*  *   * 如果下载的文件不是来自于文件系统,而是读取自数据库的字节流: new ByteArrayInputStream(byte[] content)  */ private InputStream pdfStream; public InputStream getPdfStream() {  return pdfStream; } public void setPdfStream(InputStream pdfStream) {  this.pdfStream = pdfStream; } public String mydown() throws Exception  {  //下载文件名中文对于不同浏览器版本的支持,需要区别处理    HttpServletRequest request = ServletActionContext.getRequest();  String browser = request.getHeader("user-agent");  System.out.println(browser);  String filename = "struts2文档.pdf";  if (browser.contains("MSIE"))   // IE   filename = URLEncoder.encode(filename, "UTF-8");  else if(browser.contains("Firefox"))   // Firefox   filename = URLDecoder.decode(URLEncoder.encode(filename, "UTF-8"),     "ISO-8859-1");  HttpServletResponse response = ServletActionContext.getResponse();  // response.setContentType("application/pdf");  response.setHeader("Content-Type", "application/pdf");  response.setHeader("Content-Disposition", "attachment;filename=\""+ filename + "\"");  // response.setHeader("Content-Disposition","inline;filename=\"struts2.pdf\"");  //Provides an output stream for sending binary data to the client.  ServletOutputStream sos = response.getOutputStream();  String path = ServletActionContext.getServletContext().getRealPath(    "downs")    + "/PJUG.pdf";  this.pdfStream = new FileInputStream(path);  byte[] pdf = new byte[this.pdfStream.available()];  this.pdfStream.read(pdf);  sos.write(pdf);  return null;// 自己写流,不需要返回视图 } @Override public String execute() throws Exception  {  String path = ServletActionContext.getServletContext().getRealPath(    "downs")    + "/PJUG.pdf";  this.pdfStream = new FileInputStream(path);  return SUCCESS;// 使用struts2提供的流结果集必须要返回对应的视图 }}

如果下载的文件不是来自于文件系统,而是读取自数据库的字节流

Download1.java

package itany.action;import java.io.ByteArrayInputStream;import java.io.FileInputStream;import java.io.InputStream;import java.net.URLDecoder;import java.net.URLEncoder;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class DownAction1 extends ActionSupport {/* *  * 如果下载的文件不是来自于文件系统,而是读取自数据库的字节流: new ByteArrayInputStream(byte[] content) */private InputStream imgStream; private int imgId; private String imagename;public InputStream getImgStream()    {        return imgStream;    }    public void setImgStream(InputStream imgStream)    {        this.imgStream = imgStream;    }        public int getImgId()    {        return imgId;    }    public void setImgId(int imgId)    {        this.imgId = imgId;    }         public String getImagename()    {        return imagename;    }    public void setImagename(String imagename)    {        this.imagename = imagename;    }    @Overridepublic String execute() throws Exception {    byte[] image=null;        Class.forName("oracle.jdbc.driver.OracleDriver");        Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@10.0.5.98:1521:ora9","wk","wk");        PreparedStatement stat=conn.prepareStatement("select imgData from tblImage where imgId="+imgId);        ResultSet rset=stat.executeQuery();        if(rset.next())        {            image=rset.getBytes("imgData");        }        rset.close();        stat.close();        conn.close();this.imgStream=new ByteArrayInputStream(image);return SUCCESS;// 使用struts2提供的流结果集必须要返回对应的视图}}


将图片保存在数据库中

package itany.test;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import org.junit.Test;public class ImageTest {@Testpublic void saveImage(){try {//通过文件流读取图片FileInputStream fis=new FileInputStream("/home/soft02/Test/a.txt");byte[] image=new byte[fis.available()];fis.read(image);fis.close();//将字节数组写入数据库blob字段Class.forName("oracle.jdbc.driver.OracleDriver");Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@10.0.5.98:1521:ora9","wk","wk");PreparedStatement stat=conn.prepareStatement("insert into tblImage values (?, ?)");stat.setInt(1,3);stat.setBytes(2,image);stat.executeUpdate();stat.close();conn.close();} catch (Exception e) {e.printStackTrace();}}}


 

原创粉丝点击