用javaWeb写1创建Web项目ch45ex_uploadLimited将案例素材中的网页文件indexjsp和fileUploadjsp件复制到目录srcmainwebapp将2个jar包commons-fileupload-14jar和commons-io-25jar复制粘贴到目录srcmainwebappWEB-INFlib。2在文件选择页indexjsp中含有一个文本框和文件域文本框的默
并且保持图片的比例不变。
(1)创建Web项目ch4.5ex_uploadLimited,将案例素材中的网页文件index.jsp和fileUpload.jsp件复制到目录src/main/webapp,将2个jar包commons-fileupload-1.4.jar和commons-io-2.5.jar复制粘贴到目录src/main/webapp/WEB-INF/lib。
(2)在文件选择页index.jsp中,含有一个文本框和文件域,文本框的默认值为zhangsan或自己姓名的全拼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h2>文件上传</h2>
<form method="post" action="fileUpload.jsp" enctype="multipart/form-data">
<div>
<label for="name">姓名:</label>
<input type="text" id="name" name="name" value="zhangsan">
</div>
<div>
<label for="file">选择文件:</label>
<input type="file" id="file" name="file">
</div>
<div>
<input type="submit" value="上传">
</div>
</form>
</body>
</html>
(3)fileUpload.jsp页已有的代码是案例ch4.5_fileUpload中的代码,请修改和补充代码,实现根据文本框输入的内容,创建文件存放目录,如uploadFolder\zhangsan。
<%@ page language="java" import="java.io.*, java.util.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*" pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
String uploadFolder = "uploadFolder";
if (name != null && !name.trim().equals("")) {
uploadFolder += "\\" + name;
}
String filePath = "";
String fileName = "";
String message = "";
boolean success = false;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4 * 1024);
factory.setRepository(new File(uploadFolder));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(2 * 1024 * 1024); // 文件大小限制
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
fileName = item.getName();
long fileSize = item.getSize();
if (fileName != null && !fileName.trim().equals("") && fileSize > 0) {
int index = fileName.lastIndexOf("\\");
if (index != -1) {
fileName = fileName.substring(index + 1);
}
filePath = uploadFolder + "\\" + fileName;
File uploadedFile = new File(filePath);
item.write(uploadedFile);
message = "文件上传成功!";
success = true;
} else {
message = "请选择上传的文件!";
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
message = "文件上传失败:" + ex.getMessage();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传结果</title>
</head>
<body>
<h2>文件上传结果</h2>
<% if (success) { %>
<div>
<p><strong>文件名:</strong><%= fileName %></p>
<p><strong>文件大小:</strong><%= fileSize/1024 %> KB</p>
<p><strong>文件类型:</strong><%= item.getContentType() %></p>
<p><strong>文件路径:</strong><%= filePath %></p>
<p><strong>上传结果:</strong><%= message %></p>
</div>
<% } else { %>
<div>
<p><strong>上传结果:</strong><%= message %></p>
</div>
<% } %>
</body>
</html>
(4)实现上传文件到该存放目录,并显示相关信息,如图4-12所示。
(5)如果上传的文件大小超过2MB,则不保存,并显示提示信息
<%@ page language="java" import="java.io.*, java.util.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*" pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
String uploadFolder = "uploadFolder";
if (name != null && !name.trim().equals("")) {
uploadFolder += "\\" + name;
}
String filePath = "";
String fileName = "";
String message = "";
boolean success = false;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4 * 1024);
factory.setRepository(new File(uploadFolder));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(2 * 1024 * 1024); // 文件大小限制
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
fileName = item.getName();
long fileSize = item.getSize();
if (fileName != null && !fileName.trim().equals("") && fileSize > 0) {
if (fileSize > upload.getSizeMax()) { // 文件大小超过限制
message = "上传的文件大小超过2MB,请重新选择文件!";
} else {
int index = fileName.lastIndexOf("\\");
if (index != -1) {
fileName = fileName.substring(index + 1);
}
filePath = uploadFolder + "\\" + fileName;
File uploadedFile = new File(filePath);
item.write(uploadedFile);
message = "文件上传成功!";
success = true;
}
} else {
message = "请选择上传的文件!";
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
message = "文件上传失败:" + ex.getMessage();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传结果</title>
</head>
<body>
<h2>文件上传结果</h2>
<% if (success) { %>
<div>
<p><strong>文件名:</strong><%= fileName %></p>
<p><strong>文件大小:</strong><%= fileSize/1024 %> KB</p>
<p><strong>文件类型:</strong><%= item.getContentType() %></p>
<p><strong>文件路径:</strong><%= filePath %></p>
<p><strong>上传结果:</strong><%= message %></p>
</div>
<% } else { %>
<div>
<p><strong>上传结果:</strong><%= message %></p>
</div>
<% } %>
</body>
</html>
(6)有兴趣的同学还可考虑实现:获取上传文件的扩展名(index = fileName.lastIndexOf("."); String nameExt = fileName.substring(index + 1).toLowerCase();),如果上传的是jsp文件,则给出不许上传的提示;如果上传的是图片文件,即扩展名在列表jpg,jpeg,png,gif,bmp中(提示,可逐个判断,也可用查找方法strA.indexOf(strB)),在页面上显示该图片,设置图片的样式,使得图片的最大宽度和最大高度都为300px,并且保持图片的比例不变。
<%@ page language="java" import="java.io.*, java.util.*, org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*" pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
String uploadFolder = "uploadFolder";
if (name != null && !name.trim().equals("")) {
uploadFolder += "\\" + name;
}
String filePath = "";
String fileName = "";
String message = "";
boolean success = false;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4 * 1024);
factory.setRepository(new File(uploadFolder));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(2 * 1024 * 1024); // 文件大小限制
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
fileName = item.getName();
long fileSize = item.getSize();
if (fileName != null && !fileName.trim().equals("") && fileSize > 0) {
if (fileSize > upload.getSizeMax()) { // 文件大小超过限制
message = "上传的文件大小超过2MB,请重新选择文件!";
} else {
int index = fileName.lastIndexOf("\\");
if (index != -1) {
fileName = fileName.substring(index + 1);
}
filePath = uploadFolder + "\\" + fileName;
File uploadedFile = new File(filePath);
item.write(uploadedFile);
message = "文件上传成功!";
success = true;
// 获取上传文件的扩展名
index = fileName.lastIndexOf(".");
String nameExt = fileName.substring(index + 1).toLowerCase();
if (nameExt.equals("jsp")) { // 不允许上传jsp文件
uploadedFile.delete();
message = "不允许上传jsp文件!";
success = false;
} else if (nameExt.equals("jpg") || nameExt.equals("jpeg") || nameExt.equals("png") || nameExt.equals("gif") || nameExt.equals("bmp")) { // 显示图片
out.print("<div><img src=\"" + request.getContextPath() + "/" + filePath.replace("\\", "/") + "\" style=\"max-width:300px;max-height:300px;\"></div>");
}
}
} else {
message = "请选择上传的文件!";
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
message = "文件上传失败:" + ex.getMessage();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传结果</title>
</head>
<body>
<h2>文件上传结果</h2>
<% if (success) { %>
<div>
<p><strong>文件名:</strong><%= fileName %></p>
<p><strong>文件大小:</strong><%= fileSize/1024 %> KB</p>
<p><strong>文件类型:</strong><%= item.getContentType() %></p>
<p><strong>文件路径:</strong><%= filePath %></p>
<p><strong>上传结果:</strong><%= message %></p>
</div>
<% } else { %>
<div>
<p><strong>上传结果:</strong><%= message %></p>
</div>
<% } %>
</body>
</html>
原文地址: https://cveoy.top/t/topic/6yt 著作权归作者所有。请勿转载和采集!