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)
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
@Override
protected 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)
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected 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)
*/
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected 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 block
e.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;
}
@Override
public 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;
}
@Override
public 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类型说明