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 ...
随机推荐
- 基于nginx搭建yum源服务器
1.首先关闭防护墙或者设置规则通过且关闭selinux 停止firewall systemctl stop firewalld 禁止firewall开机启动 systemctl disable f ...
- 如何取消Microsoft账户登录电脑
手贱用Microsoft账户登录了一下笔记本里面的日历,TNND微软直接就把你电脑的登录账户直接改成了微软账户,花了1个小时才搞回去. 步骤如下: 0--脑残微软的设计,点了下日历,弹出下面这个,绝对 ...
- 做嵌入式,C语言相关的朋友不要错过
前言 相对来讲嵌入式相关的人群总体来说比较少,那么有没有一个聚集地呢? 为回馈读者,「编程珠玑」与「嵌入式linux」,「EmbeddDeveloper」三个公众号联合组织了此次福利活动,「编程珠玑」 ...
- centos 网卡状态
由于ifconfig命令没法看到网卡的一些状态, 以下有5种方法查看网卡状态,是否连通网线 1)# dmesg | grep eth.....e1000: eth0 NIC Link is Up 10 ...
- Django Template(模板)
一.模板组成 组成:HTML代码 + 逻辑控制代码 二.逻辑控制代码的组成 1.变量 语法格式 : {{ name }} # 使用双大括号来引用变量 1.Template和Context对象(不推荐使 ...
- 在MVC中Dashboard基础入门操作
DevExpress中的Dashboard这个图形插件真的很好用, 只需要在设计器绑定数据就行了,完全不用写后台代码.我也是刚学这个插件,可能还有一些我没有了解的知识点,忘各位大佬不吝赐教.我写这篇博 ...
- js 前端常用排序算法总结
(冒泡排序.快排顺序.选择排序.插入排序.归并排序) 下面是前端比较常用的五个算法demo: 冒泡算法:比较两个相邻的数值,if第一个>第二个,交换他们的位置元素项向上移动至正确的顺序. fun ...
- 读取导入csv csv报错iterable expected, not float
示例代码import pandas as pdimport reimport csv data = pd.read_csv('nuojia.csv', encoding='utf-8')# print ...
- Day 1 下午
POINT 1 贪心 每一步都取当前的最优解的思想:一般来说符合直观思路,需要严格的证明:OI中使用多个错误的贪心策略进行加成有时会有良好的效果 例一给定N个农民,第i个农民有Ai单位的牛奶,单价Pi ...
- 【转】Java 线程池
什么是线程池? 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程.线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求.然而, ...