<form action="uploadImage.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*" required>
<input type="submit" value="Upload">
</form><%@ page import="java.io.*, java.util.*, javax.servlet.http.*, javax.servlet.*, javax.imageio.ImageIO, java.awt.image.BufferedImage" %>
<%@ page import="org.apache.commons.fileupload.*, org.apache.commons.fileupload.disk.*, org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<%
// Check if the request contains multipart content
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
out.println("No file uploaded");
return;
}
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try {
// Parse the request to get file items
List<FileItem> fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator<FileItem> i = fileItems.iterator();
while (i.hasNext()) {
FileItem fi = i.next();
if (!fi.isFormField()) {
String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Define the new dimensions
int targetWidth = 200;
int targetHeight = 200;
// Read the image
BufferedImage originalImage = ImageIO.read(fi.getInputStream());
BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = resizedImage.createGraphics();
g2d.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null);
g2d.dispose();
// Save the resized image
String uploadPath = getServletContext().getRealPath("") + File.separator + "uploads";
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) uploadDir.mkdir();
String filePath = uploadPath + File.separator + fileName;
File outputFile = new File(filePath);
ImageIO.write(resizedImage, "jpg", outputFile);
out.println("File " + fileName + " has uploaded successfully!");
}
}
} catch (Exception ex) {
out.println("There was an error: " + ex.getMessage());
}
%>web.xml中的文件大小限制配置。enctype属性设置为multipart/form-data。通过以上步骤和示例代码,可以实现JSP环境下的图片上传及大小修改功能,并有效解决常见问题。