JavaWeb 文件上传限制示例:限制文件大小,指定存放目录,图片预览
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>文件上传限制</title>
</head>
<body>
<h2>请选择要上传的文件:</h2>
<form action='fileUpload.jsp' method='post' enctype='multipart/form-data'>
<p>请输入存放目录名:<input type='text' name='folderName' value='zhangsan'></p>
<p>请选择要上传的文件:<input type='file' name='file'></p>
<p><input type='submit' value='上传'></p>
</form>
</body>
</html>
<p><%@ page language='java' contentType='text/html; charset=UTF-8'
pageEncoding='UTF-8'%>
<%@ page import='java.io.File' %>
<%@ page import='java.io.IOException' %>
<%@ page import='java.util.List' %>
<%@ page import='org.apache.commons.fileupload.FileItem' %>
<%@ page import='org.apache.commons.fileupload.disk.DiskFileItemFactory' %>
<%@ page import='org.apache.commons.fileupload.servlet.ServletFileUpload' %>
<%@ page import='org.apache.commons.io.FileUtils' %></p>
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>文件上传结果</title>
<style type='text/css'>
img {
max-width: 300px;
max-height: 300px;
}
</style>
</head>
<body>
<h2>文件上传结果</h2>
<%
// 获取上传文件的存放目录
String folderName = request.getParameter('folderName');
if (folderName == null || folderName.trim().length() == 0) {
out.print('<p style='color:red'>请输入存放目录名</p>');
return;
}
// 如果上传文件的存放目录不存在,则创建该目录
String uploadFolder = getServletContext().getRealPath('/uploads');
File folder = new File(uploadFolder, folderName);
if (!folder.exists()) {
folder.mkdir();
}
// 解析上传文件
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding('UTF-8');
upload.setFileSizeMax(2 * 1024 * 1024); // 限制上传文件的大小为2MB
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
continue; // 如果是普通表单字段,则跳过
}
// 获取上传文件的文件名,并根据扩展名判断是否允许上传
String fileName = item.getName();
int index = fileName.lastIndexOf('.');
String nameExt = fileName.substring(index + 1).toLowerCase();
if (nameExt.equals('jsp')) {
out.print('<p style='color:red'>不允许上传jsp文件</p>');
return;
}
if (!(nameExt.equals('jpg') || nameExt.equals('jpeg') || nameExt.equals('png') || nameExt.equals('gif') || nameExt.equals('bmp'))) {
out.print('<p style='color:red'>不允许上传该类型的文件</p>');
return;
}
// 如果上传文件的大小超过2MB,则不保存,并显示提示信息
if (item.getSize() > 2 * 1024 * 1024) {
out.print('<p style='color:red'>上传的文件不能超过2MB</p>');
return;
}
// 保存上传文件
File uploadedFile = new File(folder, fileName);
item.write(uploadedFile);
out.print('<p>文件上传成功,文件名:' + fileName + '</p>');
// 如果上传的是图片文件,则在页面上显示该图片
if (nameExt.equals('jpg') || nameExt.equals('jpeg') || nameExt.equals('png') || nameExt.equals('gif') || nameExt.equals('bmp')) {
String imgUrl = request.getContextPath() + '/uploads/' + folderName + '/' + fileName;
out.print('<p><img src='' + imgUrl + ''></p>');
}
}
%>
</body>
</html>
原文地址: https://www.cveoy.top/t/topic/mt5M 著作权归作者所有。请勿转载和采集!