JSP/Serlet 使用fileupload上传文件
需要引用的jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
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);
}
}
注意要采用action 方式提交表单,不要使用 ajax的方式提交表单,否则会有异常信息。
org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:885)
JSP/Serlet 使用fileupload上传文件的更多相关文章
- FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输
fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...
- JSP Servlet学习笔记——使用fileupload上传文件
关键代码如下: index.jsp <body> <center> <h3>文件上传</h3> <font color="red&quo ...
- 解决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 ...
- ASP.NET使用FileUpload上传文件
前台代码: <asp:FileUpload ID="fuKeleyi" runat="server" /> <asp:Button ID=&q ...
- .NET FileUpLoad上传文件
一.上传扫描件到服务器,自定义创建文件夹(如果存在该文件夹,则无需创建),并判断格式以及文件大小进行保存: 首先创建一个保存按钮事件: protected void btnSave_Click(obj ...
- 使用UpdatePanel时FileUpload失效的问题!【FileUpload上传文件失败】
1.使用UpdatePanel后,FileUpload的HasFile始终为false,无论你是否选中了上传文件! 方案一:设置ScriptManager 的EnablePartialRenderin ...
- asp.net FileUpload上传文件夹并检测所有子文件
1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1& ...
- fileupload上传文件时带参数
var userID = ""; $('#picture').fileupload({ url: "http://localhost:35708/Handler/File ...
随机推荐
- anaconda的scikit-learn报错It seems that scikit-learn has not been built
我们在导入sklearn时往往会报错. import sklearn Traceback (most recent call last): File "<stdin>" ...
- windows server 2012 R2 部署AD域服务
一.部署AD域控制器 首先,我们检查第一台已经安装Windows Server 2012 R2的服务网络的相关配置,确定的服务器IP地址.子网掩码.默认网关的参数如下,由于该服务器既要充当ADDC角色 ...
- LeetCode算法题-Flood Fill(Java实现)
这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到 ...
- Java设置接口跨域
现在我们很多项目都是基于Java的REST结构风格前后端分离,在前端访问后端的时候就存在跨域,这个时候后端接口不处理就会存在访问不了.上代码! 1.创建一个Filter 在web.xml中配置 < ...
- git 同步远程分支
1. 同步远程分支到本地 git fetch 2. 查看本地分支 git branch *dev //当前分支 master test 3.切换分支 git checkout master // 切换 ...
- c++11の关联容器
一.关联容器 C++的容器类型可以分为顺序容器和关联容器两大类.对于关联容器,主要有map和set,对于这两种,根据不同的维度,衍生出了8种容器 map ...
- 【vue】iView-admin2.0动态菜单路由
vue项目实现动态路由有俩种方式 一.前端在routers中写好--所有--路由表 <前端控制路由>,登录时根据用户的角色权限来动态的显示菜单路由 二.前端通过调用接口请求拿到当前用户-- ...
- 云计算openstack共享组件(1)——时间同步服务ntp
一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行加,而西时区则为减. 地球的轨道并非正圆,在加上自转速度逐年递减, ...
- ModuleNotFoundError: No module named 'redis'
在安装过Redis后,通过Python程序导入redis时,遇到一个“ModuleNotFoundError: No module named redis”错误,网上查了下原因,解决办法如下: Pyt ...
- 使用队列实现栈(2)(Java)
class MyStack { private Queue q1; private Queue q2; public MyStack(int size) { this.q1 = new Queue(s ...