大家进来讨论一下JAVA大文件(百M以上)的上传下载实现技术

长公子冰 2009-09-04 10:49:54
我们的项目中客户有这个需求,因为在外出差的工程人员需要从系统里下载一些解决问题的相关附件,大的几百M,服务完毕还要上传服务附件,也是小的几十M,大的上百M。

目前的实现技术是使用struts1的FormFile,commons-fileupload,混用,也就是表单上传方式。我们开发都是在本机测试的,上传可下载的速度都是2、3M/s,可是实际中都是互联网上传,客户反应附件大了根本传不上。

分析一下目前实现方式
表单上传会占用大量的服务器内存,如果同时很多用户一起上传那可能是一场悲剧。
上传和下载的速度必然受到网络的迫害,如果网络稍微断那么1秒钟,之前的努力就全报废了,不支持断点。网络好上传的就快点,不好那就根本传不上去。

在网上搜了下相关的问题,有用FTP的,但是那个感觉很麻烦,还要再装个FTP服务器什么的。有用FLASH的,那东西收费?还有用ActiveX控件?貌似只有IE支持?当然表单上传都说别传100M以上的。对了,还有Applet,这个还要客户端安装,感觉麻烦啊。。。

想问问大家在实际项目中遇到过这样的需求么?采用何种方式实现的呢?
...全文
2347 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
win32user 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

网上有一个Web大文件断点续传控件,Xproer.HttpUploader4:http://www.cnblogs.com/xproer/archive/2012/05/29/2523757.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度:

文件MD5值计算完毕

服务器根据MD5检测是否存在相同文件

续传文件

从服务器加载文件列表

文件上传中

文件上传完毕

上传文件夹

与Discuz!X2整合-后台安装断点续传控件

与Discuz!X2整合-后台启用断点续传控件

与Discuz!X2整合-后台断点续传控件启用成功

与Discuz!X2整合-前台发帖页面

与Discuz!X2整合-上传


页面调用示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>
<link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>
<script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>
<script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>
<script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>
<script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript">
var cbItemLast = null;
var cbMgr = new CombinBoxMgr();

$(document).ready(function()
{
cbMgr.LoadInControl("FilePanel");
cbMgr.Init();
});
</script>
</head>
<body>
<div id="FilePanel"></div>
</body>
</html>

资源下载:
CAB安装包
开发文档
ASP.NET-ACCESS示例
ASP.NET-SQL2005示例
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP-MySQL-UTF8示例
[/Quote]
这个不错。目前公司做的一个视频网站就是用的这个控件。楼主可以试用一下。这个开发文档也比较全面。主要是整合简单。
wokofoxp 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我们的项目中客户有这个需求,因为在外出差的工程人员需要从系统里下载一些解决问题的相关附件,大的几百M,服务完毕还要上传服务附件,也是小的几十M,大的上百M。

目前的实现技术是使用struts1的FormFile,commons-fileupload,混用,也就是表单上传方式。我们开发都是在本机测试的,上传可下载的速度都是2、3M/s,可是实际中都是互联网上传,客户反应附件大了根本传不上。
……
[/Quote]
网上有一个Web大文件断点续传控件,Xproer.HttpUploader4:http://www.cnblogs.com/xproer/archive/2012/05/29/2523757.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:

文件MD5值计算进度:

文件MD5值计算完毕

服务器根据MD5检测是否存在相同文件

续传文件

从服务器加载文件列表

文件上传中

文件上传完毕

上传文件夹

与Discuz!X2整合-后台安装断点续传控件

与Discuz!X2整合-后台启用断点续传控件

与Discuz!X2整合-后台断点续传控件启用成功

与Discuz!X2整合-前台发帖页面

与Discuz!X2整合-上传


页面调用示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>
<link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>
<script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>
<script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>
<script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>
<script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript">
var cbItemLast = null;
var cbMgr = new CombinBoxMgr();

$(document).ready(function()
{
cbMgr.LoadInControl("FilePanel");
cbMgr.Init();
});
</script>
</head>
<body>
<div id="FilePanel"></div>
</body>
</html>

资源下载:
CAB安装包
开发文档
ASP.NET-ACCESS示例
ASP.NET-SQL2005示例
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP-MySQL-UTF8示例
lv0031 2010-04-13
  • 打赏
  • 举报
回复
学习一下...
daisycool 2009-09-04
  • 打赏
  • 举报
回复
这是一个老生常谈的设计性问题。想通过HTTP进行文件传输会遇到的瓶颈就是HTTP协议并非为传输大型文件所设计和发明的,所以如果你想把大文件上传到服务器上,那必须考虑使用别的协议来避开HTTP的瓶颈,例如FTP。这样的话基于浏览器的上传就不太现实,必须用别的工具来实现,如Applet,Flash等。
guodong66 2009-09-04
  • 打赏
  • 举报
回复
FTP 目前唯一办法。
aaron0203 2009-09-04
  • 打赏
  • 举报
回复
Mark
没做过..
等楼下 各位大侠..
huguang 2009-09-04
  • 打赏
  • 举报
回复
FTP是正道。
huguang 2009-09-04
  • 打赏
  • 举报
回复
Applet或者其他的,总之,最好的还是FTP。
哪怕是网页,也是嵌入FTP的客户端插件。
想办法实现吧。
  • 打赏
  • 举报
回复
学习了,我也想知道
紫炎圣骑 2009-09-04
  • 打赏
  • 举报
回复
用FTP

有很多FTP工具呀
长公子冰 2009-09-04
  • 打赏
  • 举报
回复
想用Flash上传,不过看了网上Flash+java上传的demo后,发现仅仅是用flash替代了struts的FormFile或者其他形式的附件表单,后台依旧是原来的文件流代码,这并没有什么优势。能否让flash支持断点呢?我知道断点续传要读取本地文件,之后和服务器上的比较,上次写到哪,这样做可能比较好,不至于原来传的白传了。
好吃的松子 2009-09-04
  • 打赏
  • 举报
回复
还是别让web做它不擅长的东西吧
toss2000 2009-09-04
  • 打赏
  • 举报
回复
使用FTP上传,sun.net.ftp.FtpClient,查查,到处都是
it老鸟的呐喊 2009-09-04
  • 打赏
  • 举报
回复
在上传的时候,系统自动根据大小判断是否需要分割文件,如果超过单个文件上传大小,则将文件分割成几个小文件,陆续上传(对于用户来说还是指上传了一个文件),上传完之后再合并成一个文件。

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧