Servlet实现图片文件上传
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实现图片文件上传的更多相关文章
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
- SpringMvc MultipartFile 图片文件上传
spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipar ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- 【Demo Project】AjaxSubmit+Servlet表单文件上传和下载
一.背景 前段时间公司要求我做一个上传和下载固件的页面,以备硬件产品在线升级,现在我把这部分功能抽取出来作为一个Demo Project给大家分享. 话不多说,先看项目演示 --> 演示 源码 ...
- commons-fileload图片文件上传工具 , servlet文件图片上传案列
本案列是java maven工程小项目,提供个大家学习! 1.在pom.xml文件中导入依赖: <!--文件上传依赖--><dependency> <groupId&g ...
- SpringMvc commons-fileupload图片/文件上传
简介 SpringMvc文件上传的实现,是由commons-fileupload这个jar包实现的. 需求 在修改商品页面,添加上传商品图片功能. Maven依赖包 pom.xml <!-- 文 ...
- Demo:servlet实现图片的上传
一个简单的servlet例子,实现图片的上传功能,上传的图片给 ?HttpServletResponse 对象 public class BackGroundLogoServlet extends H ...
- spring boot:实现图片文件上传并生成缩略图(spring boot 2.3.1)
一,为什么要给图片生成缩略图? 1, 用户上传的原始图片如果太大,不能直接展示在网站页面上, 因为不但流费server的流量,而且用户打开时非常费时间, 所以要生成缩略图. 2,服务端管理图片要注意的 ...
随机推荐
- Android仿微信底部选项卡
第一步 添加依赖 dependencies { compile 'com.yinglan.alphatabs:library:1.0.5' } 第二步 布局使用 <?xml version=&q ...
- 算法习题---3.08循环小数(UVa202)
一:题目 输入整数a和b(<=a<=,<=b<=),输出a/b的循环小数表示以及循环节长度. 例如,a=,b=,小数表示为0.(),循环字节长度为21 当循环节长度超过50时, ...
- jmeter 查看结果树,获取响应体写法校验是否提取写法是否正确的方法
JSON Path Expression里面写入提出值的写法,点击Test测试提取
- 用python查看文件是否存在的三种方式
目录 1.使用os模块 判断文件是否可做读写操作 2.使用Try语句 3. 使用pathlib模块 正文 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做 ...
- ubuntu18.04 install rar
sudo apt-get update #如果好久没有更新资源建议update一次 sudo apt-get install rar #安装rar sudo apt-get install unrar ...
- delphi中TTreeView的使用方法
[学习万一老师博客摘要] TTreeView 与两个重要的类相关:TTreeNodes.TTreeNode . TTreeNodes即是TTreeView 的Items属性,TTreeNodes是TT ...
- sqlserver如何创建链接服务器
遇到下列问题: 线上服务器A,中转服务器B,本地服务器C 数据在A上面,想在B上面操作类似 select * from [A].[database].table这样的SQL,不用去链接服务器,直接把处 ...
- ADFS RelayState
https://blogs.technet.microsoft.com/askds/2012/09/27/ad-fs-2-0-relaystate/ 什么是RelayState,我为什么要关心?有两种 ...
- WordPress简洁的SEO标题、关键词和描述
WordPress标题.关键词和描述,之所以简洁,那是站在SEO的角度来考虑的. 首先,现在关键词这个标签早已被搜索引擎扔进历史的垃圾堆,所以这个keywords标签已经没用了,不写也罢. 其次,描述 ...
- 码云clone提示“you do not have permission to pull from the repository”
使用git进行项目下载,换了电脑,配置了账号和邮箱后,pull一个私有项目的时候,出现如下问题: 原因分析: 由于没有设置Gitee的SSH公钥.生成公钥和配置公钥的办法,可以参考Gitee帮助里面的 ...