java ftp上传5G以上大文件,怎么做

java ftp上传5G以上大文件,怎么做,第1张

java上传可以使用common-fileupload上传组件的。common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件下面先介绍上传文件到服务器(多文件上传):import javax.servlet.*

import javax.servlet.http.*

import java.io.*

import java.util.*

import java.util.regex.*

import org.apache.commons.fileupload.*

public class upload extends HttpServlet {

private static final String CONTENT_TYPE = "text/htmlcharset=GB2312"

//Process the HTTP Post request

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

response.setContentType(CONTENT_TYPE)

PrintWriter out=response.getWriter()

try {

DiskFileUpload fu = new DiskFileUpload()

// 设置允许用户上传文件大小,单位:字节,这里设为2m

fu.setSizeMax(2*1024*1024)

// 设置最多只允许在内存中存储的数据,单位:字节

fu.setSizeThreshold(4096)

// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

fu.setRepositoryPath("c:\\windows\\temp")

//开始读取上传信息

List fileItems = fu.parseRequest(request)

// 依次处理每个上传的文件

Iterator iter = fileItems.iterator()//正则匹配,过滤路径取文件名

String regExp=".+\\\\(.+)$"//过滤掉的文件类型

String[] errorType={".exe",".com",".cgi",".asp"}

Pattern p = Pattern.compile(regExp)

while (iter.hasNext()) {

FileItem item = (FileItem)iter.next()

//忽略其他不是文件域的所有表单信息

if (!item.isFormField()) {

String name = item.getName()

long size = item.getSize()

if((name==null||name.equals("")) &&size==0)

continue

Matcher m = p.matcher(name)

boolean result = m.find()

if (result){

for (int temp=0temp if (m.group(1).endsWith(errorType[temp])){

throw new IOException(name+": wrong type")

}

}

try{//保存上传的文件到指定的目录//在下文中上传文件至数据库时,将对这里改写

item.write(new File("d:\\" + m.group(1))) out.print(name+" "+size+"

")

}

catch(Exception e){

out.println(e)

}}

else

{

throw new IOException("fail to upload")

}

}

}

}

catch (IOException e){

out.println(e)

}

catch (FileUploadException e){

out.println(e)

}

}

}

如果是页面传至后台,那么页面上传文件的时候进行分片处理,如果是后台之间调用,直接代理里面分片处理。关键点,当前一片传输完毕之后,收到成功返回才开始传输下一片如果传输失败则重传当前片数,超时重传。传输时带上文件唯一标识,文件当前片数,总片数,当前片数md5校验值等。必要参数。 大致为这样,注意不要内存泄露了。

解决这种大文件上传不太可能用web上传的方式,只有自己开发插件或是当门客户端上传,或者用现有的ftp等。

1)开发一个web插件。用于上传文件。

2)开发一个FTP工具,不用web上传。

3)用现有的FTP工具。

下面是几款不错的插件,你可以试试:

1)Jquery的uploadify插件。具体使用。你可以看帮助文档。

2)网上有一个Web大文件断点续传控件:http://www.cnblogs.com/xproer/archive/2012/02/17/2355440.html

此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。

JavaUploader免费开源的,是用applet实现的,需要签名才能在浏览器上用,支持断点。缺点是收费。

3)applet也是一种方式,MUPLOAD组件就是以APPLET方式处理的。

如果你不需要访问用户的硬盘文件,那你可以使用FTP上传,也支持断点。但只要你访问用户磁盘,又要支持断点,那必须要签名的。不然浏览器不知道你的身份。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/679629.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-29
下一篇2023-07-29

发表评论

登录后才能评论

评论列表(0条)

    保存