项目中有时会上传大文件,经常会出现链接超时的问题,需要通过文件分片的方式上传大文件。实现原理是在前端将文件分割成指定大小的“文件块”,多次上传。每次上传前,从后台查询成功上传文件的大小,然后从指定位置剪切文件并上传,文件块被后台接收后追加到指定文件中。
本博客适合有一些后台基础或者前端有后台合作的朋友。
这里后台需要提供两个界面,一个用于上传文件,一个用于查询上传文件的大小。
前端代码:https://github.com/li5454yong/FileUpload.git
将主代码放在背景中
com.fs.controller套装软体:导入java.io.File:导入java.io.FileInputStream:导入java.io.FileOutputStream:导入java.io.FileWriter:导入java。超正析象管异常:导入java.io.InputStream:导入java。io。randomaccessfile:导入java.util。迭代器:导入java.util.Map:导入javax.annotation.Resource:导入javax。servlet。http。httpservletrequest:import org。阿帕奇。公地。郎3。字符串utils:导入组织。cssource。客户端全局:导入组织。cssource。常见。myexception:导入组织。cssource。快速DFS。文件信息;导入组织。cssource。快速DFS。存储客户端:导入组织。cssource。快速DFS。跟踪和记录;导入组织。cssource。快速DFS。trackerserver导入组织junit测试:导入组织springframework。定型观念。控制器;导入组织。弹簧框架。网络。绑定。注释。请求映射:导入组织。弹簧框架。网络。绑定。注释。requestmethod:导入组织。弹簧框架。网络。绑定。注释。响应主体:导入组织。弹簧框架。网络。多部分。多部分文件;导入组织。弹簧框架。网络。多部分的。多部分请求;汇入客户、绝地、绝地:导入重定向客户端绝地武士哈丁佛:导入com。阿里巴巴。法斯森。jsonimport comfs。实体。uploadedfileinfo:import com . fs . util . uploadutil:/* * *作者管理* * 2016年-什么12-你好20-什么8333659359333638 */controller公共类fastdfsuploadcontroller { @ resource private uploadutil uploadutil;@ requestmapping(值=' v1/uploadsize ',方法=RequestMethod).post)@ response body public long uploadsize(http servlet request){ string name=request。获取参数(' name ');长尺寸=长。解析长(请求。get参数(' size '):尝试{ jedishardinfo jeddhardinfo=new jeddhardinfo(' 192。168 .0 .12 ');杰迪丝杰迪丝=新绝地(绝地哈丁佛);字符串str=jedis.get(名称);uploadedfileinfo uploadedfileinfo=null;//哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟,你是说.0if(字符串utils。isempty(str)){ uploadedfileinfo=new uploadedfileinfo();jedis.set(名称、JSON。to scoconstruction(uploadedfileinfo));杰迪丝。close();返回0l;} uploadedfileinfo=JSON。解析对象(字符串,uploadedfileinfo。类);杰迪丝。close();//张居正和张居正if(size=uploadedfileinfo。get size()){ system。出去。println('吴亚玲吗');}//uploadutil。getfileinfo(uploadedfileinfo。getfileid());返回uploadedfileinfo。getsize();} catch(异常e){ e . print stack trace();返回0l;} @RequestMapping(值=' v1/上传文件',方法=RequestMethod ).post)@ response body public int upload(http servlet request){//common smmultipart resolver=new///common smmultipart resolver(请求。获取会话().getServletContext():multipopersvletrequest=(multipopersvletrequest)请求;itertorstring t=multirequest。get filename();多部分文件文件详细信息=multirequest。getfile(t . next());字符串名称=请求。获取参数(' name ');JedisShardInfo jedisShardInfo=新建jedishardinfo(' 192。168 .0 .12 ');杰迪丝杰迪丝=新绝地(绝地哈丁佛);uploaded fileinfo uploaded fileinfo=JSON。解析对象(jedis。get(name),uploadedfileinfo。类);uploadedFileInfo.setFileName(名称);字符串路径=' d 3330/测试上传';文件=新建文件(路径):如果(!存在()文件!文件。isdirectory()){ boolean b=file。mkdirs();} randomaccessfile random file=null:尝试{ random file=new random file(路径'/' name,' rw ');randomfile。seek(randomfile。length());伦道夫。写入(文件详细信息。getbytes());uploadedfileinfo。setlocalpath(路径“/”名称);uploadedfileinfo。setsize(randomfile。length()):} catch(io异常e){ e . print stack trace();}最后{尝试{ randomfile。close();} catch(io异常e){ e . print stack trace();} //你好吗redis jedis.set(名称、JSON。to scoconstruction(uploadedfileinfo));杰迪丝。close();返回0;}}云娥与云娥同在联署材料韩大夫,韩大夫,韩大夫,吴亚玲吴亚玲,(中文),是不是。
非常感谢您对我们网站的支持!