首页 新闻 会员 周边

我断点续传传输文件的时候如果关闭浏览器,再次打开传输文件并不会从上次断开的地方继续传文件

0
悬赏园豆:160 [待解决问题]

求各位大神指导...

private static void upload(Plupload plupload,File pluploadDir,String fileName){
int chunks = plupload.getChunks();
//用户上传文件被分隔的总块数
int nowChunk = plupload.getChunk();
// 当前块,从0开始
// 这里Request请求类型的强制转换可能出错,配置文件中向SpringIOC容器引入multipartResolver对象即可。
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)plupload.getRequest();
// 调试发现map中只有一个键值对
MultiValueMap<String,MultipartFile> map = multipartHttpServletRequest.getMultiFileMap();
if(map!=null){
try{
Iterator<String> iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = iterator.next();
List<MultipartFile> multipartFileList = map.get(key);
for(MultipartFile multipartFile:multipartFileList){
//循环只进行一次
plupload.setMultipartFile(multipartFile);
//手动向Plupload对象传入MultipartFile属性值
File targetFile = new File(pluploadDir+"/"+fileName);
//新建目标文件,只有被流写入时才会真正存在
if(chunks>1){//用户上传资料总块数大于1,要进行合并
File tempFile = new File(pluploadDir.getPath()+"/"+multipartFile.getName());
//第一块直接从头写入,不用从末端写入
savePluploadFile(multipartFile.getInputStream(),tempFile,nowChunk==0?false:true);
if(chunks-nowChunk==1) {
//全部块已经上传完毕,此时targetFile因为有被流写入而存在,要改文件名字
tempFile.renameTo(targetFile);
}
}else{
//只有一块,就直接拷贝文件内容
multipartFile.transferTo(targetFile);
}
}
}
} catch (IOException e){
e.printStackTrace();
}
}
}
private static void savePluploadFile(InputStream inputStream,File tempFile,boolean flag){
OutputStream outputStream = null;
try {
if(flag==false){
//从头写入
outputStream = new BufferedOutputStream(new FileOutputStream(tempFile));
} else{
//从末端写入
outputStream = new BufferedOutputStream(new FileOutputStream(tempFile,true));
}
byte[] bytes = new byte[1024];
int len = 0;
while ((len = (inputStream.read(bytes)))>0){
outputStream.write(bytes,0,len);
}
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
} finally {
try{
outputStream.close();
inputStream.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
A_Qiang的主页 A_Qiang | 初学一级 | 园豆:44
提问于:2018-05-10 17:14
< >
分享
所有回答(2)
0

upload(){

  if(file.exists)

        //数据库或者什么地方读取当前文件已保存的位置(1023),返回前端需要上传的开始位置(1024)

}

ajax:

读取返回的开始位置参数,前端文件去file.slice(1024,2048),然后upload

czd890 | 园豆:14412 (专家六级) | 2018-05-11 10:41
0

不需要看代码。首先双方都需要支持。断点续传无非就是文件seek,客户端发起position,服务器从指定位置读起走。

花飘水流兮 | 园豆:13560 (专家六级) | 2018-05-11 17:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册