linux 压缩 上传到ftp后下载回来文件损坏

linux 压缩 上传到ftp后下载回来文件损坏,第1张

解决方法:在终端下登录ftp,首先输入bin,会提示已转换到BIN模式。然后进行你的put和get操作。该方法是将传输形式改为二进制传输(binary)。你的问题应该会得到解决。延伸:因为在ftp传输过程中,默认是使用ASCII模式而非BIN模式,这样会导致压缩文件在传输过程中由于编码或解码错误而导致损坏。望采纳~

在没有进行设置过程中,进行连接到ftp的服务器中之后,会提示的是错误的信息为”打开ftp服务器上的文件夹时发生错误 请检查是否”

2.这时候就需要进行设置的内容,进行打开电脑中的“工具”的选项。

3.这样就会弹出了下拉菜单中进行选择为“internet选项”即可。

4.进入到了internet选项的窗口的界面中之后,进行选择为“高级”的选项。

5.然后在列表中的设置中把”使用被动ftp”去掉即可了。

6.然后进行正常的访问到服务器中,就不会再次提示到错误的信息了。

拓展资料:

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。

参考资料: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

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存