导航:首页 > 版本升级 > java文件断点上传

java文件断点上传

发布时间:2024-11-27 08:42:01

『壹』 java中的”断点“是什么意思

这个不太难吧?
假设a给b传文件f(1024字节)。第一次b接收了512字节,那么第二次连接a就应该从513字节开始传输。
也就是说,在第二次传输时,b要提供“我要从513字节开始传送文件f”的信息,然后a使用fileinputstream构建输入流读取本地文件,使用skip(512)方法跳过文件f的前512字节再传送文件,之后b将数据追加(append)到先前接收的文件末尾即可。
进一步考虑,如果要实现多线程传送,即分块传输,也同样的道理。假如b要求分作两块同时传输,那么a启动两个线程,一个从513字节读到768字节(工256字节),第二个线程从769字节到1024字节即可。
如果你要从网络上下载文件,就是说a方不是你实现的,那么你要先确认a方支不支持断电续传功能(http1.1),然后你查阅下http1.1协议,在http1.1版本里,可以通过设置请求包头某个字段的信息(使用urlconnection创建连接并使用setrequestproperty(stringkey,stringvalue)方法设置)从而精确读取文件的某一段数据的。注意,基于http断点续传的关键是1.1版本,1.0版本是不支持的。
补充:
嗯,查到了,是设置range属性,即setrequestproperty("range","bytes=513-1024").你可以使用迅雷下载某个文件,然后从”线程信息“中就可以看到这个http1.1断点续传的所有行为信息了。

『贰』 java 函数设置一个断点,调试时结果一直等待进不去

一、在浏览器中F12打开调试,进入NetWork选项下,如果你请求能够发送成功则,有请求的显示,如果请求失败则该调试中不会有请求展示出来。如图:

二、看你后台打的断点,如果断点是一个小圆点则标示请求未过去,仔细检查你的请求路径、请求代码写的是不是有问题吧。如果断点是一个带尾巴的圆点,表示请求能进去,重新编译项目顺便清一下Tomcat下项目缓存吧

最后这种小问题不建议你一直浪费时间,还不如重新写一遍快呢

『叁』 java ftp上传时断网,文件损坏

以二进制流上传,然后实现断点续传。

/**
* 上传文件到FTP服务器,支持断点续传
* @param local 本地文件名称,绝对路径
* @param remote 远程文件路径,使用/home/directory1/subdirectory/file.ext 按照Linux上的路径指定方式,支持多级目录嵌套,支持递归创建不存在的目录结构
* @return 上传结果
* @throws IOException
*/
public UploadStatus upload(String local,String remote) throws IOException{
FTPClient ftpClient = new FTPClient();
//设置PassiveMode传输
ftpClient.enterLocalPassiveMode();
//设置以二进制流的方式传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
UploadStatus result;
//对远程目录的处理
String remoteFileName = remote;
if(remote.contains("/")){
remoteFileName = remote.substring(remote.lastIndexOf("/")+1);
String directory = remote.substring(0,remote.lastIndexOf("/")+1);
if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){
//如果远程目录不存在,则递归创建远程服务器目录
int start=0;
int end = 0;
if(directory.startsWith("/")){
start = 1;
}else{
start = 0;
}
end = directory.indexOf("/",start);
while(true){
String subDirectory = remote.substring(start,end);
if(!ftpClient.changeWorkingDirectory(subDirectory)){
if(ftpClient.makeDirectory(subDirectory)){
ftpClient.changeWorkingDirectory(subDirectory);
}else {
System.out.println("创建目录失败");
return UploadStatus.Create_Directory_Fail;
}
}

start = end + 1;
end = directory.indexOf("/",start);

//检查所有目录是否创建完毕
if(end <= start){
break;
}
}
}
}

//检查远程是否存在文件
FTPFile[] files = ftpClient.listFiles(remoteFileName);
if(files.length == 1){
long remoteSize = files[0].getSize();
File f = new File(local);
long localSize = f.length();
if(remoteSize==localSize){
return UploadStatus.File_Exits;
}else if(remoteSize > localSize){
return UploadStatus.Remote_Bigger_Local;
}

//尝试移动文件内读取指针,实现断点续传
InputStream is = new FileInputStream(f);
if(is.skip(remoteSize)==remoteSize){
ftpClient.setRestartOffset(remoteSize);
if(ftpClient.storeFile(remote, is)){
return UploadStatus.Upload_From_Break_Success;
}
}

//如果断点续传没有成功,则删除服务器上文件,重新上传
if(!ftpClient.deleteFile(remoteFileName)){
return UploadStatus.Delete_Remote_Faild;
}
is = new FileInputStream(f);
if(ftpClient.storeFile(remote, is)){
result = UploadStatus.Upload_New_File_Success;
}else{
result = UploadStatus.Upload_New_File_Failed;
}
is.close();
}else {
InputStream is = new FileInputStream(local);
if(ftpClient.storeFile(remoteFileName, is)){
result = UploadStatus.Upload_New_File_Success;
}else{
result = UploadStatus.Upload_New_File_Failed;
}
is.close();
}
return result;
}

阅读全文

与java文件断点上传相关的资料

热点内容
ios15安装后找不到描述文件 浏览:440
学编程怎么学最有效 浏览:873
通过wifi传文件到ipad 浏览:197
js随机颜色 浏览:611
文件快速复制到u盘的软件 浏览:443
如何检查无线网络驱动是否正常 浏览:468
百度网盘来自分享的文件在哪里 浏览:127
如何发视频到腾讯视频文件夹里 浏览:510
微信打开cad外部文件找不到 浏览:882
平板可以打开各种文件后缀的软件 浏览:531
苹果微信文件怎么全选 浏览:749
手机里之前打开过的文件在哪里找 浏览:685
cad能看word文件吗 浏览:719
12306火车票系统后台数据库 浏览:570
js翻译德语 浏览:33
从哪里可以下载a股的数据 浏览:437
逻辑文件名和物理文件名关系 浏览:66
怎么查一个网站的外链 浏览:675
linux下db2安装时版本选择 浏览:738
汇编编程用哪个软件 浏览:486

友情链接