JSP Servlet学习笔记——使用fileupload上传文件




关键代码如下:
index.jsp
- <body>
- <center>
- <h3>文件上传</h3>
- <font color="red"><%=request.getAttribute("msg")==null?"":request.getAttribute("msg") %> </font>
- <form enctype="multipart/form-data" method="post" action="servlet/FileUploadServlet">
- 文件描述:<input type="text" name="text" /><br/>
- 选择文件:<input type="file" name="file1" /><br/>
- 选择文件:<input type="file" name="file2" /><br/>
- 选择文件:<input type="file" name="file3" /><br/>
- 选择文件:<input type="file" name="file4" /><br/>
- 选择文件:<input type="file" name="file5" /><br/>
- <input type="submit" value="上传" />
- </form>
- </center>
- </body>
FileUploadServlet.jsp
- package com.accp.fileupload.servlet;
- import java.io.File;
- import java.io.IOException;
- import java.util.List;
- 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.FileUploadException;
- import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- public class FileUploadServlet extends HttpServlet {
- private static final long serialVersionUID = 2827297299439162553L;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //使用同一种处理方法
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- response.setContentType("text/html; charset=UTF-8");
- //保存路径
- String savePath = getServletContext().getRealPath("/upload");
- File saveDir = new File(savePath);
- // 如果目录不存在,就创建目录
- if(!saveDir.exists()){
- saveDir.mkdir();
- }
- // 创建文件上传核心类
- DiskFileItemFactory factory = new DiskFileItemFactory();
- ServletFileUpload sfu = new ServletFileUpload(factory);
- //设置编码
- sfu.setHeaderEncoding("UTF-8");
- // 设置上传的单个文件的最大字节数为2M
- sfu.setFileSizeMax(1024*1024*2);
- //设置整个表单的最大字节数为10M
- sfu.setSizeMax(1024*1024*10);
- try{
- // 处理表单请求
- List<FileItem> itemList = sfu.parseRequest(request);
- for (FileItem fileItem : itemList) {
- // 对应表单中的控件的name
- String fieldName = fileItem.getFieldName();
- System.out.println("控件名称:" + fieldName);
- // 如果是普通表单控件
- if(fileItem.isFormField()){
- String value = fileItem.getString();
- //重新编码,解决乱码
- value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
- System.out.println("普通内容:" + fieldName + "=" + value);
- // 上传文件
- }else{
- // 获得文件大小
- Long size = fileItem.getSize();
- // 获得文件名
- String fileName = fileItem.getName();
- System.out.println("文件名:"+fileName+"\t大小:" + size + "byte");
- //设置不允许上传的文件格式
- if(fileName.endsWith(".exe")){
- request.setAttribute("msg", "不允许上传的类型!");
- }else{
- //将文件保存到指定的路径
- File file = new File(savePath,fileName);
- fileItem.write(file);
- request.setAttribute("msg", "上传成功!");
- }
- }
- }
- }catch(FileSizeLimitExceededException e){
- request.setAttribute("msg", "文件太大");
- }catch(FileUploadException e){
- e.printStackTrace();
- }catch(Exception e){
- e.printStackTrace();
- }
- //上传完毕后 转发到首页
- request.getRequestDispatcher("/index.jsp").forward(request, response);
- }
- }
JSP Servlet学习笔记——使用fileupload上传文件的更多相关文章
- Python+Selenium学习笔记10 - send_keys上传文件
在火狐浏览器上传文件 上传前,同一个HTML文件在火狐和Edge浏览器显示有些不同 这是Firefox浏览器的显示 这是Edge浏览器 上传后 1 # coding = utf-8 2 3 from ...
- FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输
fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
- JSP/Serlet 使用fileupload上传文件
需要引用的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar index.jsp <body> <center> <h ...
- linux学习笔记-linux主机上传下载文件至linux虚拟机的方法
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.上传文件 scp -r file 用户名@ip地址:目标目录 2.下载文件 scp -r 用户名@ip地址:文件 目标目录
- Web安全测试学习笔记-DVWA-图片上传
很多网站都有上传资源(图片或者文件)的功能,资源上传后一般会存储在服务器的一个文件夹里面,如果攻击者绕过了上传时候的文件类型验证,传了木马或者其他可执行的代码上去,那服务器就危险了. 我用DVWA的文 ...
- 解决COS、FileUpload上传文件时中文文件名乱码问题
方法: MultipartParser mp = new MultipartParser(request, 10*1024*1024); mp.setEncoding("GBK") ...
- SpringMVC使用FileUpload上传文件
进口FileUpload和common-io的Jar包 注意:1.Struts2其它方法需要使用的:struts2过滤,将改变reqeust类型,由HttpServletRequest成为MultiP ...
- 工作笔记4.struts2上传文件到server
本文介绍两种:上传文件到server的方式 一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中: 1.提交Form表单 为了能完毕文件上传,我们应该将这 ...
随机推荐
- Javascript加速运动与减速运动
加速运动,即一个物体运动时速度越来越快:减速运动,即一个物体运动时速度越来越慢.现在用Javascript来模拟这两个效果,原理就是用setInterval或setTimeout动态改变一个元素与另外 ...
- shape-outside 矩形之外的另一种思路
http://docs.webplatform.org/wiki/css/properties/shape-outside
- (FFT) A * B Problem Plus
题目链接:https://cn.vjudge.net/contest/280041#problem/F 题目大意:给你两个数,求这俩数相乘的结果.(长度最长5000) 具体思路:硬算肯定是不行的,比如 ...
- 【干货】DD 和 netcat实战---擦除数据和远控
原创:Unit 2: Linux/Unix Acquisition 2.1 Linux/Unix Acquistion Using dd Continued DD也是一个复制设备数据的工具,比特流复制 ...
- 错误的理解引起的bug async await 执行顺序
今天有幸好碰到一个bug,让我知道了之前我对await async 的理解有点偏差. 错误的理解 之前我一直以为 await 后面的表达式,如果是直接返回一个具体的值就不会等待,而是继续执行asyn ...
- 虚拟机Failed to start LSB: Bring up/down networking
1.执行 service network restart 出现以下错误 Restarting network (via systemctl): Job for network.service f ...
- C++ Primer读书笔记(2)
getline(cin,string s)可以读取一整行,包括空白符.使用ctrl+Z结束 字符串字面值与string是不同的类型.两个字符串字面值不能直接相加. 处理string对象中的字符时,C+ ...
- (二)zookeeper安装
再安装zookeeper之前,我们看下zookeeper简介 https://baike.baidu.com/item/zookeeper/4836397?fr=aladdin 再Dubbo中 官方推 ...
- VS Code 折腾记 - (5) Angular 2+ && Typescript 2 + 必备插件推荐
前言 说起来我会用VSCode,有很大一方面是因为工作需求[以前主力工具是Atom],刚好公司的前端技术栈是NG2+TS2;对于喜欢折腾的我,裸奔的VSCODE是不可以接受的.so-. eg: vsc ...
- docker:定制node.js的版本
本想用alpine,但如果想使用node.js 6.3.1版本的软件, 总会搞不定glibc和libstdc++报一个无法识别版本信息的错误. 搞了一天,算了.使用debian:stretch-sli ...