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 ...
随机推荐
- solr 常用命令
1.启动和关闭 a.启动和重启 启动和重启命令有很多选项让你运行在SolrCloud模式,使用示例配置,以hostname为开头或者非默认端口,指向本地ZooKeeper. bin/solr star ...
- Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log
1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...
- JWT笔记
JWT是一个无状态登录的技术.所谓无状态,是指和传统的session技术相比,服务器端不需要存储用户的信息.在JWT技术中,agent向server请求一个Token. 这个Token由三部分组成,h ...
- Linux SSH和SFTP服务分离
Linux SSH和SFTP服务分离 学习了:https://www.cnblogs.com/zihanxing/articles/5665383.html 都是监听22端口:
- Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- VM虚拟机 Windows虚拟机中linux鼠标不能动怎么办
有一次vmware安装red hat linux后,进入x-windows界面,鼠标不能用,百思不得其解,因为自己的安装linux的过程中设置绝对是没有问题的啊,鼠标设置肯定是usb带滑轮,这个肯定没 ...
- 两种“新型”的javaweb后门(jspx和Java Logger)
利用这个可以突破st2下 强制jsp跳转login.jsp 利用jspx解决jsp后缀被限制拿shell - Hack Blog | 黑客博客http://www.hackblog.cn/post ...
- DNS主从服务器
一.目的: 我们知道,DNS服务器在网络服务中可能出现故障当机等状况,会导致DNS服务瘫痪,显然在实际的网络应用中我们不希望出现这种状况,所有我们就要配置从 服务器来在主DNS服务器出现故障时代替他来 ...
- Android Shader 颜色、图像渲染 paint.setXfermode
Shader Shader是一个基类,表示在绘制期间颜色的水平跨度 它的子类被嵌入在Paint中使用,调用paint.setShader(shader). 除Bitmap外的其他对象,使用该Paint ...
- 苹果版小黄车(ofo)app主页菜单效果
代码地址如下:http://www.demodashi.com/demo/12823.html 前言: 最近又是公司项目上线一段时间了,又是到了程序汪整理代码的节奏了.刚好也用到了ofo主页菜单的效果 ...