jsp简易文件上传(common.fileupload)
昨天开始重新架构我的V&View(维视),之前写文章使用的是一个kindediter的插件,挺好用的.最近不知道咋了,出现了些小问题.早在写V&View的时候就想用以下两种方法实现文章发布问题:
1. 提供上传doc文档,后台自动转换成html录入数据库
2. 直接上传html文档及其相关文件或文件夹的zip压缩包,后台自动解压缩录入数据库
这两种方法可以完成代替在线的文本编辑器了.昨天实现了doc转html了,今天需要解决文件上传问题了.
之前用kindediter里面也有文件上传的jsp实例:upload_json.jsp,是用fileupload实现的,就顺势效仿一下了,最后发现fileupload真的很实用啊。代码挺简单的
开始之前当然需要从 http://jakarta.apache.org/commons/fileupload/ 下载到最新版的 fileupload啦
我的uploader.jsp:
之前的jsp不能读取除file以外的input,因为form设置了enctype="multipart/form-data",直接使用request.getParameter()是取不出来别的值的,所以刚对jsp优化了一下,注释部分是原来的代码
<%@page import="vell.bibi.vview.util.FileUtil"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.io.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.json.simple.*" %>
<%
String FileUID = null;
String UserID = null;
//文件保存目录路径
String savePath = pageContext.getServletContext().getRealPath("/") + "temp/";
//文件保存目录URL
String saveUrl = request.getContextPath() + "/temp/";
//定义允许上传的文件扩展名
List<String> extList = new ArrayList<String>();
extList.add("doc");
extList.add("zip");
//最大文件大小5M
long maxSize = 5*1024*1024;
response.setContentType("text/html; charset=UTF-8");
if(!ServletFileUpload.isMultipartContent(request)){
out.println(getError("请选择文件。"));
return;
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
String fileName = item.getName();
long fileSize = item.getSize();
// 检查当前项目是普通表单项目还是上传文件。
String fieldName = item.getFieldName();
if (item.isFormField()) {
//提取其他参数
if (fieldName.equals("FileUID")) {
FileUID = item.getString();// 显示表单内容。
savePath += FileUID + "/";
} else if (fieldName.equals("UserID")) {
UserID = item.getString();
}
}else{
//检查文件大小
if(item.getSize() > maxSize){
out.println(getError("上传文件大小超过限制。"));
return;
}
//检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if(!extList.contains(fileExt)){
out.println(getError("上传文件扩展名是不允许的扩展名"));
return;
}
try{
FileUtil.makeDir(savePath);//创建完整的保存路径
File uploadedFile = new File(savePath, fileName);
item.write(uploadedFile);
}catch(Exception e){
FileUtil.deleteDir(savePath);//删除文件夹
out.println(getError("上传文件失败。"));
return;
}
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("FileUID", FileUID);
obj.put("UerID", UserID);
out.println(obj.toJSONString());
}
/*if (!item.isFormField()) {
//检查文件大小
if(item.getSize() > maxSize){
out.println(getError("上传文件大小超过限制。"));
return;
}
//检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if(!extList.contains(fileExt)){
out.println(getError("上传文件扩展名是不允许的扩展名"));
return;
}
try{
FileUtil.makeDir(savePath);//创建完整的保存路径
File uploadedFile = new File(savePath, fileName);
item.write(uploadedFile);
}catch(Exception e){
FileUtil.deleteDir(savePath);//删除文件夹
out.println(getError("上传文件失败。"));
return;
}
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl + fileName);
out.println(obj.toJSONString());
}*/
}
%>
<%!
private String getError(String message) {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toJSONString();
}
%>
其中用到一个FileUtil的工具类,主要用来创建和删除文件夹的:
package vell.bibi.vview.util;
import java.io.File;
public class FileUtil {
public static void makeDir(File dir) {
if(dir == null) return;
if(!dir.getParentFile().exists()) {
makeDir(dir.getParentFile());
}
if(!dir.exists()){
dir.mkdir();
}
}
public static void makeDir(String dirStr){
if(dirStr == null) return;
File dir = new File(dirStr);
makeDir(dir);
}
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
//递归删除目录中的子目录下
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
public static void deleteDir(String dirStr){
if(dirStr == null) return;
File dir = new File(dirStr);
deleteDir(dir);
}
}
对应的html文件只需要用一个表单就搞定了:
<form action="uploader.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="FILEDATA"/><br/>
<input type="hidden" name="FileUID" value="<%=UID.next() %>"/>
<input type="hidden" name="UserID" value="<%=USER.getId() %>" />
<input type="submit" value="提交"/>
</form>
上传部分解决了,接下来又要进行数据库的改造了,彻底摆脱网页编辑器插件还有一大堆工作要做啊。我很期待我的新版V&View,嘿嘿
修改时间:2013-12-19 22:29
jsp简易文件上传(common.fileupload)的更多相关文章
- 文件上传组件FileUpload 以及邮箱搭建JavaMail
文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...
- .JavaWeb文件上传和FileUpload组件使用
.JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...
- JSP多文件上传到服务器
问题描述: 作为一个Java开发Web方向的程序员,很重要的一个功能,就是上传文件功能是一定要掌握的,今天整理了一下代码. 1.JSP显示界面代码和动态添加上传文件个数. <%@ page la ...
- jsp Servlet 文件上传
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- JSP的文件上传
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/file-uploading.html: 一个JSP可以用一个HTML表单标签,它允许用户上传文件到服务器 ...
- Android+jsp +html 文件上传案例 已测试 成功通过
我文件上传一直是广大读者一个问题 今天就把成功案例写下 javaweb 网页前段 <%@ page language="java" import="java.uti ...
- 基于jsp的文件上传和下载
参考: 一.JavaWeb学习总结(五十)--文件上传和下载 此文极好,不过有几点要注意: 1.直接按照作者的代码极有可能listfile.jsp文件中 <%@taglib prefix=&qu ...
- 文件上传(FileUpload控件)
asp.net 文件上传,大文件上传. 新建一个asp.net页面,在工具栏里拖入 FileUpload 上传控件.一个按钮 Button ! ! ! 进入Button事件 //- ...
- jsp实现文件上传下载
文件上传: upload.jsp <form action="uploadServlet" method="post" enctype="mul ...
随机推荐
- 机器学习实战:数据预处理之独热编码(One-Hot Encoding)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- about building flying sauser
download flying sauser: unzip flyingsaucer-master.zip cd flyingsaucer-master/ mvn install
- Python原型模式
如果想根据现有对象复制出新的对象并对其修改,可以考虑原型模式(Prototype Pattern) class Point: __slots__ = ("x", "y&q ...
- mysql 的存储引擎
注意:mysql开发很少显示使用外键,MyISAM可以定义外键,但不起作用. mysql最新的5.6版本支持,全文索引.
- input标签文字点击变颜色
<input type="text" class="ser_input"value="从这里搜索(^_^)" onfocus=&quo ...
- Linux中crond服务与crontab用法
需要写个在Linux下定时更新系统的脚本,man crondtab 不甚详细,现将网络上的介绍列举如下: crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序使用cr ...
- [CC150] Get all permutations of a string
Problem: Compute all permutations of a string of unique characters. 此题用循环的方式不好做,下面是一种递归的思路: 把给的字符串看成 ...
- 解决win8找不到没有AppData文件夹
现象:今天打开win8,由于是从xp直接过渡到win8,所以想寻找类似于AppData的文件夹.但是在user/用户名/下面木有. 解决:这是个隐藏文件,和xp一样,取消隐藏文件夹即可看到. 然后就可 ...
- 当 ITOA 遇上 OneAlert,企业可以至少每年节省 3600 小时!
每个工作日,一家大型企业都可能存在一两件优先级为 1 级的事件,五六件优先级为 2 级的事件和百来件优先级为 3 级的事件.试想一下,如果公司所有支持人员都要收到每个事件的通知--不想了,我好方!还能 ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(十一)--添加/删除表格中的记录
添加/删除表格中的记录 我们的最终功能是在表格中添加删除 我们通过单机工具栏上的按钮来实现添加删除 当我们单击添加按钮的时候, 表单中 第一行默认填写New contact 光标自动聚焦 当用户点击删 ...