jq异步上传文件 java_jquery uploadify和apache Fileupload实现异步上传文件示例

package com.xiaoxing.upload;

import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import java.util.UUID;

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;

/**

*

Apache Fileupload文件上传(2014-5-3)

*

1、如果你对本示例感兴趣并想了解更多,欢迎加入Java私塾在线学习社区(329232140)

*

2、针对这个例子小修小改便可移植到你的实际项目中。

*/

public class FileUploadServlet extends HttpServlet {

private static final long serialVersionUID = 7579265950932321867L;

// 设置文件默认上传目录(如果你没有在web.xml中配置的话)

private String uploadDir = "c:/"; // 文件上传目录

private String tempUploadDir = "c:/"; // 文件临时存放目录(会话销毁后由监听器自动删除)

/*

* (non-Javadoc)

* @see javax.servlet.GenericServlet#init()

* 如果在web.xml中配置了文件上传目录则优先使用,判断文件目录是否存在,不存在就创建。

*/

@Override

public void init() throws ServletException {

// 获取本项目所在真实硬盘目录

String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

path = path.substring(0, path.indexOf("WEB-INF"));

// 判断目标是否存在,不存在就建立

String uploadDir = path.concat(this.getInitParameter("uploadDir"));

String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));

File f_uploadDir = new File(uploadDir);

File f_tempUploadDir = new File(tempUploadDir);

if (!f_uploadDir.exists()) {

f_uploadDir.mkdirs();

}

if (!f_tempUploadDir.exists()) {

f_tempUploadDir.mkdirs();

}

// 给变量赋值

this.uploadDir = uploadDir;

this.tempUploadDir = tempUploadDir;

}

/*

* (non-Javadoc)

* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

* 不接收get方式提交的数据,返回上传失败状态码。

*/

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.setResponse(response);

PrintWriter out = response.getWriter();

out.print("{\"error\":\"-1\""); // 非法提交方式

}

/*

* (non-Javadoc)

* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

* 上传文件请求都是通常POST提交

*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.setResponse(response); // 设置响应类型,以便前端解析

PrintWriter out = response.getWriter();

String result = "";

try {

// 检查本次是否一个文件上传请求

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart) {

DiskFileItemFactory factory = new DiskFileItemFactory(); // 创建一个工厂基于磁盘的文件项

factory.setRepository(new File(tempUploadDir)); // 配置储存库(确保安全的临时位置时)

ServletFileUpload upload = new ServletFileUpload(factory); // 创建一个新的文件上传处理程序

upload.setSizeMax(1024 * 1024 * 100); // 设置总体要求尺寸限制(建议前后台分别设置,因为前后台用到了不同的插件)

List items = upload.parseRequest(request); // 解析请求

Iterator iter = items.iterator(); // 处理上传的项目

while (iter.hasNext()) { //如果是一次性上传多个文件,那这里会分别去保存

FileItem item = iter.next();

if (!item.isFormField()) { // 过滤表单里的非文件类型字段

if (!"".equals(item.getName())) { // 过滤非文件类型的input

String s_name = item.getName(); // 获得原始文件名

int position = s_name.lastIndexOf(".");

String s_fileType = s_name.substring(position, s_name.length()); // 获得文件后缀

String date = new SimpleDateFormat("yyyyMMdd").format(new Date());

String s = uploadDir.concat("/").concat(date).concat("/");

//这里按日期分目录保存文件

File sf = new File(s);

if (!sf.exists()) {

sf.mkdirs();

}

String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);

File path = new File(s_filePath);

item.write(path);

result += s_filePath.concat(",");

} else {

result = "";

break;

}

}

}

} else {

result = "";

}

String s_resultJSON = this.jointJSON(result); // 拼接返回前端JSON

out.print(s_resultJSON);

} catch (Exception e) {

e.printStackTrace();

} finally {

out.flush();

out.close();

}

}

/**

* 拼接JSON,将保存文件的文件名和日期目录返回给前端(前端可能需要这个路径完成其他表单操作,比如将文件路径存放到数据库)

* @param result JSON格式的字符串

* @return

* @throws UnsupportedEncodingException

*/

private String jointJSON (String result) throws UnsupportedEncodingException {

String str = "";

if(!"".equals(result)) {

String rs[] = result.split(",");

StringBuffer buffer = new StringBuffer("{\"rows\":[");

for (int i = 0; i < rs.length; i++) {

String s_tmpName = rs[i];

s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());

buffer.append("{\"name\":\"").append(s_tmpName).append("\"},");

}

str = buffer.toString();

str = str.substring(0, str.length() - 1).concat("]}");

} else {

str = "{\"error\":\"-2\""; //上传失败

}

return str;

}

/**

* 设置响应类型ContentType为"application/x-json"

* @param response

*/

private void setResponse(HttpServletResponse response) {

response.setCharacterEncoding("UTF-8");

response.setContentType("application/json;charset=UTF-8");

response.setHeader("cache-control", "no-cache");

}

}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值