坠落凡间的struts2(6)---文件的上传下载

来源:互联网 发布:vb.net 鼠标穿透控件 编辑:程序博客网 时间:2024/04/27 14:50

Servlet基于IO流的文件上传

我们直接可以使用servlet的io来传送文件,但是我们得到流需要解析,得到对应的文件信息,名字类型,内容等,需要手动的解析

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="/UFile" method="post" enctype="multipart/form-data">  名字:<input type="text" name="username">  文件:<input type="file" name="file">  <input type="submit" value="提交"></form></body></html>
servlet代码:

package org.senssic.servlet;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class UFile */public class UFile extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public UFile() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse *      response) */@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse *      response) */@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {InputStream iStream = request.getInputStream();BufferedReader bReader = new BufferedReader(new InputStreamReader(iStream));String string = "";while ((string = bReader.readLine()) != null) {System.out.println(string);}}}

然后根基流信息解析文件啦



基于组件的上传下载

fileupload组件

struts中带的有这个jar包

package org.senssic.servlet;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class UFile */public class UFile extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public UFile() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse *      response) */@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {DiskFileItemFactory factory = new DiskFileItemFactory();String FileTemp = this.getServletContext().getRealPath("uploadFile/temp");factory.setRepository(new File(FileTemp));ServletFileUpload upload = new ServletFileUpload(factory);upload.setSizeMax(1000000);try {List<FileItem> items = upload.parseRequest(request);for (FileItem item : items) {if (item.isFormField()) {System.out.println(item.getFieldName() + ":"+ item.getString());} else {System.out.println(item.getFieldName());System.out.println(item.getName());FileOutputStream oStream = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+ "upload" + File.separator + new Date()+ "." + item.getName().split("\\.")[1]));if (item.isInMemory()) {oStream.write(item.get());} else {InputStream iStream = request.getInputStream();byte[] byt = new byte[1024];while (iStream.read(byt) > 0) {oStream.write(byt);iStream.close();oStream.close();}}}}} catch (FileUploadException e) {e.printStackTrace();}}}

jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="/UFile" method="post" enctype="multipart/form-data">  名字:<input type="text" name="username">  文件:<input type="file" name="file">  <input type="submit" value="提交"></form></body></html>


JSPSmart组件

jar包下载地址:http://ishare.iask.sina.com.cn/f/62325339.html

package org.senssic.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.lxh.smart.SmartUpload;import org.lxh.smart.SmartUploadException;/** * Servlet implementation class UFile */public class UFile extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public UFile() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse *      response) */@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {SmartUpload upload = new SmartUpload();upload.initialize(this.getServletConfig(), request, response);upload.setContentDisposition(null);try {upload.upload();} catch (Exception e) {// TODO: handle exception}String form = upload.getRequest().getParameter("from");String to = upload.getRequest().getParameter("to");String subject = upload.getRequest().getParameter("subject");String content = upload.getRequest().getParameter("content");for (int i = 0; i < upload.getFiles().getCount(); i++) {org.lxh.smart.File file = upload.getFiles().getFile(i);if (!file.isMissing()) {try {file.saveAs(request.getRealPath("/") + "fileupload/temp/"+ file.getFieldName());} catch (SmartUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}


Struts2的文件上传、下载

单文件上传

action:

package org.senssic.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import com.opensymphony.xwork2.ActionSupport;public class FileUpload extends ActionSupport {private File file;//应与表单上的一致private String fileContentType;//与前面的名字一致即filexxx,且ContentType为固定名称不能更改private String fileFileName;//与前面的名字一致即filexxx,且fileName为固定名称不能更改private String savePaht;private String name;public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getSavePaht() {return savePaht;}public void setSavePaht(String savePaht) {this.savePaht = savePaht;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String execute() {System.out.println(fileContentType);try {FileInputStream in = new FileInputStream(file);FileOutputStream oStream = new FileOutputStream("d:/"+ fileFileName);byte[] byt = new byte[1024];while (in.read(byt) > 0) {oStream.write(byt);}in.close();oStream.close();} catch (Exception e) {// TODO: handle exception}return SUCCESS;}public String getFileFileName() {return fileFileName;}public void setFileFileName(String fileFileName) {this.fileFileName = fileFileName;}public String getFileContentType() {return fileContentType;}public void setFileContentType(String fileContentType) {this.fileContentType = fileContentType;}}

struts配置:

  <constant name="struts.multipart.saveDir" value="d:/temp"></constant>

<action name="fileupload" class="org.senssic.action.FileUpload">        <param name="savePaht">/WEB-INF/upload</param>        <result>/index.jsp</result>     </action>

jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="fileupload" method="post" enctype="multipart/form-data">  名字:<input type="text" name="name">   file:<input type="file" name="file">  <input type="submit" value="提交"></form></body></html>

可以通过系统拦截器控制文件的上传fileUpload系统拦截器,通过设置

allowedExtensionsSet,maximumSize,allowedTypesSet参数设置拦截文件的属性


多文件上传

只需要将action中的处理变成多个文件的处理就行了

package org.senssic.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import com.opensymphony.xwork2.ActionSupport;public class FileUpload extends ActionSupport {private File[] file;private String[] fileContentType;private String[] fileFileName;private String savePaht;private String name;public File[] getFile() {return file;}public void setFile(File[] file) {this.file = file;}public String[] getFileContentType() {return fileContentType;}public void setFileContentType(String[] fileContentType) {this.fileContentType = fileContentType;}public String[] getFileFileName() {return fileFileName;}public void setFileFileName(String[] fileFileName) {this.fileFileName = fileFileName;}public String getSavePaht() {return savePaht;}public void setSavePaht(String savePaht) {this.savePaht = savePaht;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String execute() {System.out.println(fileContentType);for (int i = 0; i < file.length; i++) {try {FileInputStream in = new FileInputStream(file[i]);FileOutputStream oStream = new FileOutputStream("d:/"+ fileFileName[i]);byte[] byt = new byte[1024];while (in.read(byt) > 0) {oStream.write(byt);}in.close();oStream.close();} catch (Exception e) {// TODO: handle exception}}return SUCCESS;}}

文件下载

action代码:

package org.senssic.action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class downFile extends ActionSupport {private String downFileName;public InputStream getFileDown() {return ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/1.txt");}public String downLoad() {return SUCCESS;}public String getDownFileName() {return downFileName;}public void setDownFileName(String downFileName) {this.downFileName = downFileName;}}
配置:

 <action name="downfile" class="org.senssic.action.downFile" method="downLoad">       <result type="stream">         <param name="inputName">fileDown</param>         <param name="contentDisposition">attachment;filename=${downFileName}</param>       </result>     </action>

注:

1、方法名与参数inputName必须匹配,即fileDown必须与得到输入流方法getFileDown对应
2、配置contentDisposiotion参数,即下载显示的文件名字类型
3、其他参数可查看stream类型说明