package fileupload;
import javax.servlet.http.HttpServlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
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.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
public FileUploadServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("FileUploadServlet 39");
try{
final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M
// 允许上传的文件格式的列表
final String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "txt",
"doc", "docx", "mp3", "wma", "m4a" };
response.setContentType("text/html");
// 设置字符编码为UTF-8, 这样支持汉字显示
response.setCharacterEncoding("UTF-8");
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
dfif.setRepository(new File(request.getRealPath("/")
+ "imgs"));// 设置存放临时文件的目录,web根目录下的imgs目录
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
// 设置最大上传尺寸
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = response.getWriter();
// 从request得到 所有 上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
out.println("<a href="/" mce_href="/""upload.html/" target=/"_top/">返回</a>");
return;
}
e.printStackTrace();
}
// 没有文件上传
if (fileList == null || fileList.size() == 0) {
out.println("请选择上传文件<p />");
out.println("<a href="/" mce_href="/""upload.html/" target=/"_top/">返回</a>");
return;
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("请选择上传文件<p />");
out.println("<a href="/" mce_href="/""upload.html/" target=/"_top/">返回</a>");
return;
}
// 得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("//") + 1);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
// 拒绝接受规定文件格式之外的文件类型
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for (; allowFlag < allowedExtCount; allowFlag++) {
if (allowedExt[allowFlag].equals(t_ext))
break;
}
if (allowFlag == allowedExtCount) {
out.println("请上传以下类型的文件<p />");
for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
out.println("*." + allowedExt[allowFlag]
+ "???");
out
.println("<p /><a href="/" mce_href="/""upload.html/" target=/"_top/">返回</a>");
return;
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String prefix = String.valueOf(now);
// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
String u_name = request.getRealPath("/") + "imgs/"
+ prefix + "." + t_ext;
try {
File file = new File(u_name);
// if(!file.exists()){
// System.out.print(file.mkdirs());
// System.out.print(file.mkdir());
// }
// 保存文件
fileItem.write(file);
out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext
+ " ??文件大小: " + size + "字节<p />");
out.println("<a href="/" mce_href="/""upload.html/" target=/"_top/">继续上传</a>");
} catch (Exception e) {
e.printStackTrace();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public void init() throws ServletException {
// Put your code here
}
}
发表评论
-
如何在url中传递中文
2012-04-30 17:00 2707url1. http://hi.baidu.c ... -
javascript阻止冒泡事件处理机制
2012-04-06 23:01 986JavaScript代码 //如果提供了事件 ... -
HTML中添加后退、前进、刷新的超链接
2012-03-30 22:02 16282<!--<a href='javas ... -
用fileupload组件上传文件出现乱码解决方法
2012-03-30 21:32 13892用fileupload组件上传文件出现乱码解决方法www.yj ... -
从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPat
2012-03-30 15:07 1648转:http://zjutsoft.iteye.com/ ... -
getRequestDispatcher()与sendRedirect()的区别
2012-03-24 15:47 27041.request.getRequestDispatch ... -
tomcat配置数据库连接池成错误
2012-03-23 17:48 1304在TOMCAT5.5.X的版本中配置数据源会出现这样的错 ... -
Connection DBUtils (封装了原始JDBC对数据库的操作的一个开源类库)
2012-03-22 18:08 1555DBUtils是Apache组织提供的一个能方便的对各种 ... -
tomcat配置数据库连接池2
2012-03-22 17:49 915为了简化通过连接池获取数据库连接的过程,JDBC ... -
tomcat配置数据库连接池
2012-03-22 17:50 1030数据库连接是比较耗 ... -
CKeditor配置(转)
2012-03-22 17:50 13339ckeditor是fckeditor的下一代版本,下面就 ... -
常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类
2012-03-22 17:50 1426现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两 ... -
struts2框架验证xml中DTD错误解决办法
2012-03-13 09:12 3015Struts2.2之后,特别是Struts2.2.3,xw ... -
Tomcat 出现 Socket acdept failed 时的解决方法
2012-03-13 08:28 917昨天编Strut2的项目时,myeclipse总是报出如下的错 ...
相关推荐
在ASP.NET开发中,FileUpload控件是用于处理用户上传文件的核心组件,特别是处理图片上传时,为了提供更好的用户体验,通常需要在用户正式提交前实现图片预览功能。这一功能可以减少用户因错误选择或不符合规格的...
【标题】"TP5+fileupload上传图片功能实现"指的是使用ThinkPHP5(简称TP5)框架实现的一个图片上传功能。TP5是中国流行的PHP开发框架,它提供了丰富的工具和组件,便于快速构建Web应用。Fileupload是Web开发中的常见...
使用fileupload组件实现文件上传功能 FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两...
本文将详细介绍如何使用ASP.NET中的`FileUpload`控件来实现图片的上传,并进一步探讨如何将图片保存到服务器上的指定文件夹以及如何将图片以二进制形式存储到数据库中。 #### 二、FileUpload 控件介绍 `FileUpload...
在这个特定的场景中,我们关注的是FileUpload控件的自动上传功能,以及如何在Visual Studio 2012环境下实现这一功能。 1. **FileUpload控件基本使用** - FileUpload控件是一个服务器控件,用于在HTML表单中提供...
这个库使得在Java应用程序中实现文件上传变得简单,无论是Web应用还是其他需要接收文件的HTTP服务。下面我们将详细探讨FileUpload的工作原理、如何使用以及其关键特性。 一、工作原理 FileUpload的核心是解析HTTP...
本文将基于给定的代码片段,深入解析如何利用FileUpload控件实现图片的上传与预览,同时探讨其实现机制及注意事项。 ### 使用FileUpload上传图片实现图片预览 #### FileUpload控件简介 `FileUpload`是ASP.NET提供...
本文将深入解析如何使用ASP.NET中的FileUpload控件实现这一功能,并详细解释代码中的关键知识点。 ### FileUpload控件简介 FileUpload控件是ASP.NET提供的一种用于处理文件上传的标准控件。它允许用户选择本地...
以上就是关于`commons-fileupload`文件上传库的简要介绍,以及如何使用它来实现图片上传功能。这个库极大地简化了Java Web应用程序中文件上传的复杂性,使得开发者可以专注于业务逻辑,而不是底层的文件处理细节。
在本文中,我们将深入探讨如何利用FileUpload控件实现多文件上传功能,并通过源代码分析来帮助理解其实现原理。 首先,我们需要明白在Asp.net 2.0中,单个FileUpload控件默认只支持单个文件的上传。为了实现多文件...
在IT行业中,文件上传功能是网站和应用程序中不可或缺的一部分,特别是在需要用户提交个人资料、...同时,开发者可以通过自定义这个组件,实现更高级的功能,如文件水印、图片压缩、拖放上传等,以满足特定项目的需求。
本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP...
"fileUpload多图片上传demo"是一个示例项目,它展示了如何实现用户选择并上传多张图片的功能。这个压缩包可能包含了一个完整的前端界面、后端处理逻辑以及可能的数据存储策略。下面将详细解析这个知识点的各个方面。...
2.图片上传过程中,以进度条形式显示其上载情况 3.图片上载到服务器,保存到系统特定文件夹下(此处为uploads文件夹),同时提供接口将图片信息保存到数据库中 4.提供查询功能,可根据文件名称、类型进行模糊查询
在Web应用中,尤其是在用户需要上传图片、文档或其他文件时,这个库扮演着关键角色。它为开发者提供了简单且灵活的方式来处理多部分表单数据,这是HTTP上传文件的基础。 在"commons-fileupload 1.2.1"和"1.2.2"这两...
总结起来,Java实现图片上传涉及的关键技术有:文件操作(File类)、HTTP请求(Multipart编码)、服务器端文件处理(如Apache Commons FileUpload)、存储策略(文件系统或云存储)以及安全性与性能优化(如文件大小...
在这个场景中,我们看到一个简单的ASP.NET页面,它包含一个FileUpload控件让用户选择图片文件,以及一个Button控件触发上传操作。当用户点击“上传”按钮时,Button1_Click事件会被触发,执行相应的代码来处理图片。...
"FileUpload多文件上传(2.0)"这个主题聚焦于2.0版本的ASP.NET中,如何使用C#来实现用户友好的多文件上传功能。下面将详细阐述这一技术的关键点。 首先,让我们了解`FileUpload`控件。在ASP.NET中,`FileUpload`控件...
以下是在JSP中使用Apache Commons FileUpload实现图片上传的基本步骤: 1. **添加依赖**:首先,在项目中引入Apache Commons FileUpload和Apache Commons IO的依赖库。这两个库提供文件上传所需的功能。 2. **配置...
以下是实现图片上传的基本步骤: 1. **配置Struts2**:在struts.xml配置文件中,定义一个Action,比如`ImageUploadAction`,并设置对应的接收方法,如`execute()`。同时,需要配置允许文件上传的相关参数。 2. **...