java servlet中上传文件的简单实现(基于第三方jar)
这里的案例使用了两种文件上传的组件、分别介绍
1、使用JSPSmartUpload完成上传
package test_servlet_package; import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.SmartUpload; public class test_servlet_SmartUpload extends HttpServlet { String tempPath = "D:\\test";
String filePath = "D:\\filePath";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("GBK");
SmartUpload mySmartUpload = new SmartUpload();
// 初始化
mySmartUpload.initialize(getServletConfig(), request, response);
long file_size_max = 4000000;
String ext = "";
try {
mySmartUpload.setAllowedFilesList("jpg,gif,png");
mySmartUpload.upload();// 上载文件
} catch (Exception e) {
response.getWriter().write("<script> alert('只允许上传.jpg和.gif类型图片文件');</script>");
}
try {
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
if (!myFile.isMissing()) {
ext = myFile.getFileExt(); // 取得后缀名
int file_size = myFile.getSize(); // 取得文件的大小
String saveurl = "";
if (file_size < file_size_max) {
// 更改文件名,取得当前上传时间的毫秒数值
Calendar calendar = Calendar.getInstance();
String filename = String.valueOf(calendar.getTimeInMillis());
Random r = new Random();
String ram = String.valueOf(r.nextInt(1241241241));
filename = filename + ram;
filename = filename.substring(0, (filename.length() - ext.length() - 1));
//saveurl = this.getServletContext().getRealPath("/") + "/uploadFile/" + filename + "." + ext;
//System.out.println(saveurl);
File uploadFile2 = new File(filePath);
if(!uploadFile2.exists()){
uploadFile2.mkdirs();
}
myFile.saveAs(filePath+"/"+filename+"." + ext);
}
}
String name = mySmartUpload.getRequest().getParameter("name");
request.setAttribute("name", "name");
request.getSession().setAttribute("name", "name");
request.getSession().getId();
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
}
request.getRequestDispatcher("/uploadsuccess.jsp").forward(request, response);
}
}
2、使用commons-fileupload完成文件上传
package test_servlet_package; 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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; public class test_servlet extends HttpServlet { String tempPath = "D:\\test";
String filePath = "D:\\filePath";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/plain;charset=gbk");
PrintWriter pw = res.getWriter();
try {
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024);
// repository 贮藏室,即临时文件目录
diskFactory.setRepository(new File(tempPath));
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 * 1024);
// 解析HTTP请求消息头
List<FileItem> fileItems = upload.parseRequest(req);
Iterator<FileItem> iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
System.out.println("处理表单内容 ...");
processFormField(item, pw);
} else {
System.out.println("处理上传的文件 ...");
processUploadFile(item, pw);
}
}
pw.close();
} catch (Exception e) {
System.out.println("使用 fileupload 包时发生异常 ...");
e.printStackTrace();
}
} // 处理表单内容
private void processFormField(FileItem item, PrintWriter pw) throws Exception {
String name = item.getFieldName();
String value = item.getString();
pw.println(name + " : " + value + "\r\n");
} // 处理上传的文件
private void processUploadFile(FileItem item, PrintWriter pw) throws Exception {
// 此时的文件名包含了完整的路径,得注意加工一下
String filename = item.getName();
System.out.println("完整的文件名:" + filename);
int index = filename.lastIndexOf("\\");
filename = filename.substring(index + 1, filename.length());
long fileSize = item.getSize();
if ("".equals(filename) && fileSize == 0) {
System.out.println("文件名为空 ...");
return;
}
File uploadFile = new File(filePath + "/" + filename);
File uploadFile2 = new File(filePath);
if(!uploadFile2.exists()){
uploadFile2.mkdirs();
}
item.write(uploadFile);
pw.println(filename + " 文件保存完毕 ...");
pw.println("文件大小为 :" + fileSize + "\r\n");
}
}
3、依赖的jar:
<classpath>
<classpathentry kind="lib" path="base/WEB-INF/lib/commons-fileupload-1.2.2.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/commons-io-2.0.1.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/jsmartcom_zh_CN.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/mysql-connector-java-5.1.21-bin.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/taglibs-standard-compat-1.2.1.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/taglibs-standard-impl-1.2.1.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/taglibs-standard-jstlel-1.2.1.jar"/>
<classpathentry kind="lib" path="base/WEB-INF/lib/taglibs-standard-spec-1.2.1.jar"/>
<classpathentry kind="output" path="base/WEB-INF/classes"/>
</classpath>
java servlet中上传文件的简单实现(基于第三方jar)的更多相关文章
- java servlet上传文件并把文件内容显示在网页中
servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...
- JAVA servlet 上传文件(commons-fileupload, commons-io)
<1>获取二进制文件流并输出 InputStream inputStream = request.getInputStream(); BufferedReader reader = new ...
- JAVA SERVLET上传文件的样码
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- Servlet上传文件
Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...
- SpringMvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- HDFS基本命令行操作及上传文件的简单API
一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据 ...
- 原生Servlet 上传文件
依赖jar <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons ...
- 使用Servlet上传文件
使用浏览器向服务器上传文件其本质是打开了一个长连接并通过TCP方式传输数据.而需要的动作是客户端在表单中使用file域,并指定该file域的name值,然后在form中设定enctype的值为mult ...
随机推荐
- Manthan, Codefest 16 D. Fibonacci-ish(暴力)
题目链接:点击打开链接 题意:给你n个数, 问最长的题目中定义的斐波那契数列. 思路:枚举開始的两个数, 由于最多找90次, 所以能够直接暴力, 用map去重. 注意, 该题卡的时间有点厉害啊. ...
- 2017.10.13 unable to open debugger port(127.0.0.1:10308)
参考来自:http://blog.csdn.net/qq_34360219/article/details/76169653 1.场景 突然间IDEA就跑不起项目了,报了如下的错误:unable to ...
- Powershell 远程管理
一直使用 mstsc,为了防止墨菲定律,准备一些备用方案 环境,win10 to win12 winrm是windows 一种方便远程管理的服务: 首先要开启winrm service,便于在日常工作 ...
- CPC23-4-K. 喵喵的神数 (数论 Lucas定理)
喵喵的神∙数 Time Limit: 1 Sec Memory Limit: 128 MB Description 喵喵对组合数比較感兴趣,而且对计算组合数很在行. 同一时候为了追求有后宫的素养的生活 ...
- Oracle 创建表空间与用户
/* 说明:若已经存在相应的用户和表空间,则需要先删除相应的用户和表空间 然后再全部重新建立 */ --删除用户 drop user XNZQWEIXIN cascade; --删除表空间 drop ...
- Ant 风格路径表达式
ANT通配符有三种: 通配符 说明 ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 例子: URL路径 说明 /app/*.x 匹配(Matches)所有在app路径下的 ...
- 【SpringMVC学习08】SpringMVC中实现文件上传
之前有写过一篇struts2实现的文件上传,这一篇博文主要来总结下springmvc实现文件上传的步骤.首先来看一下单个文件的上传,然后再来总结下多个文件上传. 1. 环境准备 springmvc上传 ...
- android 多应用程序数据共享 ContentProvider和ContentResolver
android 没有一个可以将所有应用程序数据统一放置的地方,即两个应用程序间的数据不能共享.但ContentProvider与ContentResolver可以解决多应用程序数据共享. 我们都知 ...
- Hibernate学习之单向一对多映射
© 版权声明:本文为博主原创文章,转载请注明出处 说明:该实例是通过映射文件和注解两种方式实现的.可根据自己的需要选择合适的方式 实例: 1.项目结构 2.pom.xml <project xm ...
- eclipse下构建maven spring项目
准备工作: 1.下载eclipse(Eclipse Java EE IDE for Web Developers,Version: Juno Service Release 2). 2.下载maven ...