A. 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;
}
B. ftp文件为什么那么容易损坏30分
不是。如果你的文件是exe格式的。初步判定你存放文件的机子可能中毒了。
FTP文件的传输和复制文件没什么区别的。所以不太可能出现损坏
C. FTPMNU损坏或者结构改变是怎么回事
可能是传输丢包现在造成的文件损坏。这是经常会出现的情况,建议日常及时维护修复系统即可避免。
D. 为什么上传到FTP上的文件下载时不完整或损坏
应该是上传电脑的问题,毕竟FTP本机上传下载都是正常的。首先检查是不是病毒,然后检查网络设置,比如防火墙、杀毒软件什么的,都先关闭了再试试。
E. linux 压缩 上传到ftp后下载回来文件损坏
解决方法:在终端下登录ftp,首先输入bin,会提示已转换到BIN模式。然后进行你的put和get操作。该方法是将传输形式改为二进制传输(binary)。你的问题应该会得到解决。
延伸:因为在ftp传输过程中,默认是使用ASCII模式而非BIN模式,这样会导致压缩文件在传输过程中由于编码或解码错误而导致损坏。
望采纳~
F. ftp 文件传送失败的原因
是不是你的东西太多了,删几个,或者是你打开了一个然后有上传的,这样是传不上去的哦,需要把自己正在看的这个东西关掉,然后再上传就OK了
G. c# 通过FTP上传 的 zip 文件 发生损坏,我想知道有哪些原因会引起文件损坏,以及避免措施! 代码如下!
readBytes = stream.Read(buffer, 0, bufferLength);//这里返回的是readBytes是你实际读取的长度,readBytes应该是小于等于bufferLength的
requestStream.Write(buffer, 0, bufferLength);//所以这个地方应该改成
requestStream.Write(buffer, 0, readBytes);写的长度应该是实际读取的长度,而不应该是缓冲区的长度
补充,按我的办法改成requestStream.Write(buffer, 0, readBytes);就可以了.不会带空格的
H. 使用FTP传输文件后,偶尔有些文件会损坏,打不开,请问这是什么情况怎么避免
传输是通过网络协议分割传输的,可能是传输丢包现在造成的文件损坏,你可以通过检测网线和交换机得传输速率查看网络,如果发现丢包,考虑更换传输速率更大的网线,