1.首先要导入以下两个jar包:

commons-fileupload-1.2.1.jar
commons-io-1.4.jar

2.jsp文件:index.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>文件上传</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
表单/带文件
<br>
<!-- application/x-www-form-urlencoded只有字符串的表单 -->
<form action="${pageContext.request.contextPath}/UploadPictureServlet" method="post" enctype="multipart/form-data"> 文件名
<input type="text" name="filename">
<br />
文件
<input type="file" name="file">
<br />
<input type="submit" value="提交">
</form>
</body>
</html>

3.Servlet文件:

  package com.pearl.util;

  1 import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadPictureServlet extends HttpServlet { public void destroy() {
super.destroy();
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { try {
// ① 创建ServletFileUpload实例
DiskFileItemFactory factory = new DiskFileItemFactory(); String realPath = getServletContext().getRealPath("/");
// // 【设置缓存目录】
factory.setRepository(new File(realPath));
ServletFileUpload upload = new ServletFileUpload(factory);
// ② 创建DiskFileItemFactory
// ③ 解析request获取List<FileItem>
// 【表单大小总和】
upload.setSizeMax(1024 * 1024 * 60);
// 【单个文件不得超过】
upload.setFileSizeMax(1024 * 1024 * 20);
// 【处理中文乱码】
upload.setHeaderEncoding("UTF-8");
if (upload.isMultipartContent(request)) {// 判断是否为带文件表单 <form
// enctype="multipart/form-data"
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
// 文本或文件
if (item.isFormField()) {
// 文本字段
// 获取变量名
String key = item.getFieldName();// 表单字段的变量名
String value = item.getString("UTF-8");// 表单字段的输入值
System.out.println(key);
System.out.println(value);
} else {
// 文件
// 文件类型
// text/plain .txt
// image/png .png
// image/bmp .bmp
String contentType = item.getContentType();
// 文件名
String fileName = item.getName();// 表单的输入框值
// 变量名
String name = item.getFieldName();// 表单的变量名
// 文件 内容
String content = item.getString();
// 二进制文件
InputStream input = item.getInputStream();
System.out.println(contentType);
System.out.println(fileName);
System.out.println(name);
//System.out.println(content);
System.out.println(input); // ① 服务端目录 (服务端真实路径)
String dir = getServletContext().getRealPath("/upload");
System.out.println(dir);
// ② 文件名冲突
if (fileName.contains("/")) {
fileName = fileName.substring(name.lastIndexOf("/") + 1);
System.out.println(fileName);
}
// (添加前缀 唯一字符串, 时间毫秒值 UUID随机产生全球唯的id)
String path = UUID.randomUUID().toString() + "#" + fileName; // ③ 写入File对象
File driSave = new File(dir);
if (!driSave.exists()) {
driSave.mkdir();
}
File saveFile = new File(dir, path); if (!saveFile.exists()) {
saveFile.createNewFile();
}
System.out.println(saveFile.getAbsolutePath());
item.write(saveFile);
// 删除临时文件
item.delete();
input.close();
} }
} else {
System.out.println("表单不存在文件");
}
// ④ 循环显示内容FileItem
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void init() throws ServletException { } }

4.web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UploadPictureServlet</servlet-name>
<servlet-class>com.pearl.util.UploadPictureServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>UploadPictureServlet</servlet-name>
<url-pattern>/UploadPictureServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

5.完成

Servlet实现图片文件上传的更多相关文章

  1. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...

  2. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  3. SpringMvc MultipartFile 图片文件上传

    spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipar ...

  4. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...

  5. 【Demo Project】AjaxSubmit+Servlet表单文件上传和下载

    一.背景 前段时间公司要求我做一个上传和下载固件的页面,以备硬件产品在线升级,现在我把这部分功能抽取出来作为一个Demo Project给大家分享. 话不多说,先看项目演示 --> 演示  源码 ...

  6. commons-fileload图片文件上传工具 , servlet文件图片上传案列

    本案列是java  maven工程小项目,提供个大家学习! 1.在pom.xml文件中导入依赖: <!--文件上传依赖--><dependency> <groupId&g ...

  7. SpringMvc commons-fileupload图片/文件上传

    简介 SpringMvc文件上传的实现,是由commons-fileupload这个jar包实现的. 需求 在修改商品页面,添加上传商品图片功能. Maven依赖包 pom.xml <!-- 文 ...

  8. Demo:servlet实现图片的上传

    一个简单的servlet例子,实现图片的上传功能,上传的图片给 ?HttpServletResponse 对象 public class BackGroundLogoServlet extends H ...

  9. spring boot:实现图片文件上传并生成缩略图(spring boot 2.3.1)

    一,为什么要给图片生成缩略图? 1, 用户上传的原始图片如果太大,不能直接展示在网站页面上, 因为不但流费server的流量,而且用户打开时非常费时间, 所以要生成缩略图. 2,服务端管理图片要注意的 ...

随机推荐

  1. Android 使用Intent

    使用intent可以吊起其他应用 例如发送电子邮件 public void sendEmail(View view){ Intent intent = new Intent(Intent.ACTION ...

  2. zblog文件大小超出,上传成功但插入不了

    在zblogphp时,经常会遇到需要上传2m以上的文件或图片,这个时候就需要修改默认上传文件的大小了.看了很多地方的文章都解决不了,后面在麒麟杰博客找到相关解决办法.   工具/原料   zblogp ...

  3. nginx+lua 设置跨域

    nginx 配置: header_filter_by_lua_file cros.lua; access_by_lua ' if ngx.var.request_method == "OPT ...

  4. react中,用key值来解决一些奇葩问题

    编辑用户信息,角色信息无法加载到值 改进之后:思路:由于值是设置在state里面的,界面编辑时,会重服务器拉去数据,值也设置在state里面了,但是CheckboxGroup依然不会去渲染选中的值, ...

  5. Memcached集群实现及原理介绍

    一.Memcached集群介绍 1.自身通过算法保证数据唯一性2.集群形式对用户和Memcached都是透明的3.Memcached的集群是通过客户端实现的4.Memcached服务端相互不认识 二. ...

  6. mysql5.6版本数据库向Mysql5.7版本的数据库更新数据

    timestamp 类型不允许 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 创建表的是后会报异常,解决方法是: 在my.cnf文件里面假如: s ...

  7. knox 编译 源码

    1. git clone https://gitbox.apache.org/repos/asf/knox.git cd knox mvn clean install https://cwiki.ap ...

  8. 多年经验【Parallels Desktop14.0.1 永久激活 】版 推荐苹果mac 虚拟机pmg序列号

    parallels desktop 14 mac 激活码          parallels 13免费密钥 parallels desktop 14 激活码 很多用 MAC 的朋友发现平时离不开 W ...

  9. 【Linux内核】编译与配置内核(x86)

    [Linux内核]编译与配置内核(x86)  https://www.cnblogs.com/jamesharden/p/6414736.html

  10. [转帖]AIDA64 6.10版发布:全面支持中国兆芯、海光x86 CPU

    AIDA64 6.10版发布:全面支持中国兆芯.海光x86 CPU https://www.cnbeta.com/articles/soft/892877.htm 支持国产x86了 作为硬件识别工具领 ...