在本章中,我们将讨论和学习如何在jsp中的文件上传。 jsp可以与html表单标签一起使用,以允许用户将文件上传到服务器。上传的文件可以是文本文件或二进制文件或图像文件,也可以是任何文档。
为了方便演示,首先打开eclipse创建一个动态web项目:uploadfile ,其目录结构如下所示 -
创建文件上传表单
现在来看看如何创建一个文件上传表单。 以下html代码创建一个上传器表单。 以下是要注意的重点 -
- 表单中的method属性应设置为post方法,不能使用get方法。
- 表单中的enctype属性应设置为multipart/form-data。
- 表单中的action属性应该设置为一个jsp文件,它将处理后端服务器上的文件上传。 以下示例 - 使用uploadhandle.jsp程序处理上传文件。
要上传单个文件,应该在单个<input ... />标签中指定使用type ="file"属性。 要允许多个文件上传,请将name属性包含多个具有不同值的输入标记。浏览器将浏览按钮与每个浏览器相关联。
文件:selectfile.html文件代码如下 -
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传示例</title>
</head>
<body>
<div style="margin: auto; width: 80%;">
<h3>文件上传示例</h3>
选择要上传的文件:
<form action="uploadhandle.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="50" /><input
type="submit" value="提交上传" />
</form>
</div>
</body>
</html> 这将显示以下结果。现在可以从本地电脑选择一个文件,并且当用户单击“上传文件”时,表单将随所选文件一起提交 -
注意 - 上面的表单只是虚拟表单,不起作用,要处理上传还需要编写jsp相关处理文件上传的程序。
后端jsp脚本
现在定义一个存储上传文件的位置。可以在程序中对此进行硬编码,也可以使用外部配置(如web.xml中的context-param元素)添加此目录名称,如下所示:
以下是uploadfile.jsp的源代码。这可以一次处理多个文件的上传。 在继续上传文件之前,需要考虑以下几点:
- 以下示例依懒于fileupload类库; 确保类路径中有最新版本的commons-fileupload.x.x.jar文件(可以从 http://commons.apache.org/fileupload/ 下载)。
- fileupload类库依懒于commons io;确保类路径中有最新版本的commons-io-x.x.jar文件(可以从 http://commons.apache.org/io/ 下载)。
- 在测试以下示例时,应该将上传的文件大小小于maxfilesize,否则文件将不会被上传。
- 这个项目中是将文件上传到项目部署的目录下,但您可配置并创建目录c:temp和c:apache-tomcat8.5.29webappsdata或指定到其位置。
文件:uploadhandle.jsp 的代码实现如下 -
<%@ page language="java" contenttype="text/html; charset=utf-8"
pageencoding="utf-8"%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="org.apache.commons.io.output.*"%>
<%
file file;
int maxfilesize = 5000 * 1024;
int maxmemsize = 5000 * 1024;
servletcontext context = pagecontext.getservletcontext();
//string filepath = context.getinitparameter("file-upload");
string filepath = request.getsession().getservletcontext().getrealpath("");
//string filepath = request.getcontextpath();
system.out.println("filepath => " + filepath);
// verify the content type
string contenttype = request.getcontenttype();
if (contenttype == null) {
system.out.println("contenttype => " + contenttype);
contenttype = "";
}
if ((contenttype.indexof("multipart/form-data") >= 0)) {
diskfileitemfactory factory = new diskfileitemfactory();
// maximum size that will be stored in memory
factory.setsizethreshold(maxmemsize);
// location to save data that is larger than maxmemsize.
factory.setrepository(new file("c:temp"));
// create a new file upload handler
servletfileupload upload = new servletfileupload(factory);
// maximum file size to be uploaded.
upload.setsizemax(maxfilesize);
try {
// parse the request to get file items.
list fileitems = upload.parserequest(request);
// process the uploaded file items
iterator i = fileitems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>jsp file upload</title>");
out.println("</head>");
out.println("<body>");
while (i.hasnext()) {
fileitem fi = (fileitem) i.next();
if (!fi.isformfield()) {
// get the uploaded file parameters
string fieldname = fi.getfieldname();
string filename = fi.getname();
boolean isinmemory = fi.isinmemory();
long sizeinbytes = fi.getsize();
// write the file
if (filename.lastindexof("") >= 0) {
file = new file(filepath + filename.substring(filename.lastindexof("")));
} else {
file = new file(filepath + filename.substring(filename.lastindexof("") + 1));
}
fi.write(file);
out.println("uploaded filename: " + filepath + filename + "<br>");
}
}
out.println("</body>");
out.println("</html>");
} catch (exception ex) {
system.out.println(ex);
}
} else {
out.println("<html>");
out.println("<head>");
out.println("<title>servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>no file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%> 现在尝试使用上面创建的html表单上传文件。部署项目后,打开浏览器访问url: http://localhost:8080/uploadfile/selectfile.html 时将显示以下结果。
如果编写的jsp脚本工作正常,选择的文件应该上传到项目的根目录中。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!