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;
}
@Override
public 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 {
@Test
public 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();
}
}
}