01文件上传准备

文件上传的准备:

1.在表单中必须有一个上传的控件

<input type="file" name="headImg"/>

2.get方式的请求有大小的限制,在文件上传的时候get方式不能满足要求,所有表单的提交方式必须是post

<form action="/upload" method="post">

3.表单的编码方式应该修改为multipart/form-data,以二进制的形式进行数据的传输

<form action="/upload" method="post" enctype="multipart/form-data">

注意:此时,Servlet中就不能再使用request对象.getParameter(String name)获取请求参数

因为已经改成了流,可以通过打印的字节数可以看出,因此不能getParameter

02基于Apache FileUpload组件

使用基于Apache FileUpload上传组件实现文件的上传:

使用步骤:

1.将jar包导入到项目中 (注意需要倒入两个包

commons-fileupload-1.2.2.jar    commons-io-1.4.jar

2.参考commons-fileupload-1.2.2/site/using.html用户指南

3.代码:

package uploading;import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
@WebServlet("/upload")
public class registerRequset extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");//判断是否文件上传的按钮boolean isMultipart = ServletFileUpload.isMultipartContent(req);if (!isMultipart) {return;}try {// Create a factory for disk-based file itemsFileItemFactory factory = new DiskFileItemFactory();// Create a new file upload handlerServletFileUpload upload = new ServletFileUpload(factory);// Parse the requestList<FileItem>items = upload.parseRequest(req);for (FileItem fileItem : items) {if (fileItem.isFormField()) {/*System.out.println("文件名"+fileItem.getFieldName());System.out.println("文件大小"+fileItem.getSize());System.out.println(fileItem.getSize());*/}else {System.out.println("文件名"+fileItem.getFieldName());System.out.println("文件大小"+fileItem.getSize());System.out.println(fileItem.getString());String fileName=UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(fileItem.getName());//将文件保存到服务器上:fileItem.write(new File("D:/",fileName));}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

测试表单;

/upload/register.jsp

<%@page import="java.util.Arrays"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!-- 用户注册 --><form action="/upload" method="post" enctype="multipart/form-data">用户名:<input type="test" name="username"/><br/>年龄:<input type="test" name="age"/><br/>头像:<input type="file" name="headImg"/><br/><input type="submit" value="注册"/><br/></form>
</body>
</html>

Notes:

细节处理:
文件名称的处理问题:

如果A用户上传了一个文件名叫做小黄人,B用户上传了一个文件也叫做小黄人,此时后面的文件会将前面的额文件覆盖掉

解决方案:

使用UUID来生成一个随机的而且不重复字符串作为文件的名称

获取真实文件的名称,使用FilenameUtils这个工具类来获取它的后缀名

String fileName = UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(fileItem.getName());

JSP学习笔记(五)文件上传相关推荐

  1. java web 文件上传_Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思 ...

  2. 网安学习笔记-1 文件上传

    文件上传漏洞初步认识 什么是文件上传漏洞 指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等 文件上传漏洞的危害 可以通过文件上传漏洞上传 ...

  3. antd vue表单上传文件_AntDesign vue学习笔记-自定义文件上传

    上传文件时实际可能需要传输一个token. 方法一: 1.查看vue antdesign文档 https://vue.ant.design/components/upload-cn/ 2.使用cust ...

  4. MUI学习笔记之图片上传和预览

    MUI学习笔记之图片上传和预览 源代码是从博客园下载 我一边学习,一边注释,力求理解 <head> <meta charset="UTF-8"> <m ...

  5. opencv学习笔记五--文件扫描+OCR文字识别

    opencv学习笔记五--文件扫描+OCR文字识别 文件扫描 定义函数 边缘检测 获取轮廓 变换 OCR文字识别 环境配置 代码 文件扫描 # 导入工具包 import numpy as np imp ...

  6. wmm的学习日记(文件上传漏洞)

    这个星期正式学习了一下文件上传漏洞,虽然之前也有接触过这样的题目,但还是云里雾里的感觉.现在应该可以不靠题解完完全全靠自己的脑子做一些简单的题目啦.接下来就让我浅浅总结一下吧. 目录 文件上传漏洞简介 ...

  7. java上传视频到七牛云_Java进阶学习:将文件上传到七牛云中

    Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...

  8. JSP和Tag之文件上传

    JSP和Tag之文件上传 jsp页面预览 Sc0545.jsp代码 <%@ page language="java" import="java.util.*&quo ...

  9. java ee 上传文件_17.《JavaEE 学习笔记》Servlet 上传文件

    功能介绍: 利用 Servlet 和表单提交,选择本地文件上传到服务器.上传的文件可以是文本文件或图像文件或任何文档,不能是文件夹. 需要引入的 jar 文件:commons-fileupload-1 ...

  10. Python+Selenium学习笔记10 - send_keys上传文件

    在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...

最新文章

  1. Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
  2. webstorm 运行android,Windows React Native环境搭建:webstorm+android studio 及解决热更新
  3. springboot 主键重复导致数据重复_程序员:MySQL处理插入过程中主键或唯一键重复值的解决办法
  4. 网络工程师交换试验手册之二十一:单臂路由的配置实例
  5. 【nginx笔记】系统参数设置-使Nginx支持更多并发请求的TCP网络参数
  6. python创造订单失败_使用Python API创建新订单,get AttributeError:“str”对象没有属性“iteritems”...
  7. 四大关键词解读“智慧乌鲁木齐”密码
  8. Eucalyptus云服务平台
  9. 对文件夹中文件进行批量重命名
  10. idea怎么运行c语言程序,IntelliJ IDEA 10.0 64位运行方法
  11. RT Preempt Linux简介
  12. python码合并txt文件
  13. 关于RC电路特点以及几种常见的典型应用
  14. 大二算法期末复习-排序-英文姓名排序
  15. 手机里面的照片被误删了怎么找回?
  16. 2022-2028全球与中国国内和国际物流服务市场现状及未来发展趋势
  17. 微信小程序 map 自定义地图数据,实现方式+思路+代码(最简易的实现方式)
  18. 计算机ps cs2考试,Adobe Photoshop CS2考试大纲
  19. MG7780打印机喷嘴堵塞
  20. audio标签与video标签的常用属性及方法

热门文章

  1. 11s云存储空间怎么清理_谁说vivo没有云相册,上手vivo X27,教你玩转云相册
  2. matlab求最大李指数,李指数和最大李指数
  3. 为什么净水器连线要接地?
  4. keil修改 Pack Installer 路径
  5. 软件测试技术概念辨析
  6. PTC Creo 4.0 M150
  7. 一种基于LSTM的音频质量检测方案
  8. vue 项目dev/sit/uat环境判断
  9. 从《网安法》出发_给企业安全管理者的五条建议
  10. A Ship Detector Applying Principal Component Analysis to the Polarimetric Notch Filter