在JSP中实现图片上传功能需要结合Servlet处理文件流,以下是实现步骤和示例代码:
一、前端表单设计
<!-- upload.jsp --> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <label>选择图片:</label> <input type="file" name="imageFile" accept="image/*"> <input type="submit" value="上传"> </form>关键点:
enctype="multipart/form-data"必须设置accept="image/*"限制文件类型
二、后端Servlet处理
// UploadServlet.java @WebServlet("/UploadServlet") @MultipartConfig public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) { try { Part filePart = request.getPart("imageFile"); String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); InputStream fileContent = filePart.getInputStream(); // 保存到服务器路径(示例路径) String savePath = getServletContext().getRealPath("/uploads"); Files.copy(fileContent, Paths.get(savePath, fileName)); response.getWriter().print("上传成功!文件名:" + fileName); } catch (Exception e) { response.setStatus(500); e.printStackTrace(); } } }三、配置注意事项
- 依赖库:需要
javax.servlet.http.Part支持(Servlet 3.0+) - 存储路径:
// 推荐使用安全路径 String uploadPath = getServletContext().getRealPath("") + File.separator + "uploads"; new File(uploadPath).mkdirs(); // 创建目录 - 安全限制:
// 检查文件类型 if (!fileName.toLowerCase().endsWith(".jpg") && !fileName.toLowerCase().endsWith(".png")) { response.getWriter().print("仅支持JPG/PNG格式"); return; }
四、高级功能扩展
- 重命名文件:
String newName = UUID.randomUUID().toString() + ".jpg"; - 缩略图生成: 使用
ImageIO或Thumbnailator库:Thumbnails.of(new File(savePath, fileName)) .size(200, 200) .toFile(new File(savePath, "thumb_"+fileName));
五、常见问题解决
- 文件大小限制: 在
web.xml中配置:<multipart-config> <max-file-size>10485760</max-file-size> <!-- 10MB --> </multipart-config>