java实现大文件的上传
文件上传一直是B/S结构中很重要的一项功能,在java中并没有很好的实现文件上传的类包,因此出现了一些开源的组件,Smartupload ,commons-fileupload,还有国内的一个"牛人"的(不好意思叫不上名字来),这几个组件中Smartupload 出来的时候应该最早,不过现在已经不再有新的版本出现,还有一个不足的地方就是Smartupload 支持上传的文件最大在100M左右,这可满足不了客户的需求,听说commons-fileupload不错,经过几番测试终于搞定,下面是代码,3个jsp文件 upload.jsp success.jsp error.jsp 一个action类
upload.jsp如下:
<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*" %>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ include file="/basic/include/headerjsf1.jsp" %>
<%pageContext.setAttribute("jsp.tags.reuse", new Boolean(false));%>
<A:navigation/>
<hr>
<center><b><font size=+1><bean:message key="upload.name"/></font></b></center>
<html>
<head>
<title>????</title>
</head>
<body>
<form action="/budget3/FileUploadAction.do" name="one" enctype="multipart/form-data" method="post">
<p align="center">文件上传
<input type="File" name="fileupload" value="upload" />
<input type="submit" value="上传">
<input type="reset" value="取消">
</p>
</form>
</body>
</html>
很简单,在选择上传文件后,此页面会转向FileUploadAction.do,这个类负责完成文件的上传功能,具体代码如下:
package com.atools.budget.TestTree.action;
import com.atools.ggcw.action.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.commons.fileupload.*;
import org.apache.commons.io.*;
import java.io.*;
import java.util.*;
/**
* @author hh
*
*/
public class FileUploadAction extends BaseAction {
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response )
{
ActionForward forward=null;
try
{
System.out.println("start");
DiskFileUpload upload=new DiskFileUpload();
List uploadlist=upload.parseRequest(request);
// System.out.println("list is "+uploadlist);
Iterator iter=uploadlist.iterator();
while(iter.hasNext())
{
FileItem item=(FileItem)iter.next();
if(!item.isFormField())
{
String filename=item.getName();
filename=FilenameUtils.getName(filename);
if(!filename.equals(""))
{
System.out.println("start"+filename);
String savepath="D:\\temp\\"+filename;
System.out.println("savepath is "+savepath);
File saveFilepath=new File(savepath);
item.write(saveFilepath);
forward=mapping.findForward("success");
}else
forward=mapping.findForward("error");
}
}
}catch(Exception ex)
{
ex.printStackTrace();
System.out.println("程序发生错误,抛出异常为 "+ex.getMessage());
}
return forward;
}
}
两个转向页面success.jsp和error.jsp很简单,这里就不写了.作者测试了一下上传200M的文件很快就完成了,而Smartupload 的根本实现不了200M左右文件的上传
在笔者查资料的时候,发现很多都是这样写的
<%@ page language=“java”contentType=“text/html;charset=GBK”%>
<%@ page import=“java.util.*”%>
<%@ page import=“org.apache.commons.fileupload.*”%>
<html>
<head>
<title>文件上传</title>
</head>
<%
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节
fu.setSizeMax(10000000);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath(“D:\\Tomcat5\\TEMP”);
//开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();
item.write(“D:\\UploadTest\\”+ name);
}
}
%>
其中直接得到文件名 item.getName();
然后将其写入item.write(“D:\\UploadTest\\”+ name);是不对的,因为item.getName()得到的文件名是包括上传路径的,比如E:\work.doc,在写入的时候D:\\UploadTest\+E:\work.doc肯定是不对的,还有一点实例item的write()方法要求传入的参数为File类的实例.
以上用到的两个jar包可以到 1:commons-fileupload http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi
2:Commons-IO http://jakarta.apache.org/commons/io/ 去下载.
里面有很多东西还在琢磨,有知道的朋友也可以交流
相关推荐
粒子群算法PSO和蜣螂算法DBO栅格地图路径规划(目标函数:最短距离)【含Matlab源码 9796期】.zip
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
《网络安全自学教程》- 工作中常用的Linux命令
100个Linux常用命令及常用操作。
正交拉丁超立方(OLHC)分组与实验设计(DOE)评估的优化Python实现.rar
正交拉丁超立方(OLHC)分组与实验设计(DOE)评估的优化Python实现.rar
Java微服务如何拆解审计日志查询服务
标题:Java微服务如何拆解审计日志查询服务 内容概要:围绕缓存策略、任务调度、回压控制和审计追踪,拆解Java微服务如何拆解审计日志查询服务的实现细节。 xdronline.com xdrea.com 9g.xinmei6.com xinghaohuanbao.com m.xiker66.com
港股十档行情tick数据涵盖逐笔成交与委托,记录每笔买卖价格、成交量及挂单明细 逐笔数据包含成交时间、价格、股数、成交方向,委托数据展示买一至买十、卖一至卖十的价格与数量
港股十档行情tick数据涵盖逐笔成交与委托,记录每笔买卖价格、成交量及挂单明细。逐笔数据包含成交时间、价格、股数、成交方向,委托数据展示买一至买十、卖一至卖十的价格与数量。分钟数据汇总每分钟开盘价、最高价、最低价、收盘价、成交量及成交额。历史行情覆盖近十五年,字段清晰完整,便于回溯分析。 数据源:CMES金融数据库


