本次首先实现了jpg、txt等文件的预览,其实文件预览与文件下载的配置几乎一样,就是处理方式有点不同,struts中配置如下
<param name="contentDisposition">attachment;filename="${uploadFileName}"</param>
这是下载,如果去掉关键字“attachment”,则为预览。预览的文件类型可以使用
<param name="contentType">application/pdf</param>
进行控制,其中application/pdf为预览的文件类型。然而这样设定的话有一个缺点,就是说只能指定一种类型的文件,而不能指定多种文件类型,于是,便把struts的配置使用java在action中实现如下,最后返回为空即可:
action:
//转码,解决中文名字问题
uploadFileName = new String(uploadFileName.getBytes("ISO-8859-1"), "UTF8");
String path=ServletActionContext.getServletContext().getRealPath(uploadFileName);
//根据文件夹路径和文件名,创建file文件
File file = new File(path);
long fileSize = file.length();
String fileName = file.getName();
String suffix1 = fileName.substring(fileName.lastIndexOf(".") + 1);
//用输入流读取文件
inputStream = new FileInputStream(file);
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType(UtilTools.returnContentType(suffix1));
response.setHeader("Content-Disposition", "filename=\"" + uploadFileName +"\"");
//缓存
byte[] buffer = new byte[(int) fileSize];
int offset = 0;
int numRead = 0;
while (offset < buffer.length&& (numRead = inputStream.read(buffer, offset, buffer.length - offset)) >= 0) {
offset += numRead;
}
// 确保所有数据均被读取
if (offset != buffer.length) {
completely read file " + file.getName());
}
//写向前台
response.getOutputStream().write(buffer);
response.getOutputStream().flush();
response.flushBuffer();
response.getOutputStream().close();
将contentType所有类型进行封装,在action中 直接调用即可
static String pdf ="application/pdf";
static String jpg = "text/plain";
static String java ="text/plain";
/*ppt和doc文件不能打开,Chrome没有这个插件*/
static String pptx ="application/x-ppt";
static String doc ="application/msword";
public static String returnContentType(String str){
String type="";
if ("pdf".equals(str)){
type = UtilTools.pdf;
}else if("jpg".equals(str)){
type = UtilTools.jpg;
}else if("java".equals(str)){
type=UtilTools.java;
}else if("pptx".equals(str)){
type=UtilTools.pptx;
}else if("doc".equals(str)){
type=UtilTools.doc;
}
return type;
}