FTP上传、下载文件

 ftp上传文件代码以及目录编码方式

 

if (FTPReply.isPositiveCompletion(

        ftpClient.sendCommand("OPTS UTF8", "ON"))

  )  { 
                LOCAL_CHARSET = "UTF-8"; 
      }

这段代码是用于判断FTP服务器是否支持UTF-8编码。

ftpClient.sendCommand("OPTS UTF8", "ON")发送了一个FTP命令 "OPTS UTF8",并传递参数 "ON",用于启用UTF-8编码模式。如果服务器支持并成功执行该命令,返回的响应码应该是 200 或者 250。

FTPReply.isPositiveCompletion是FTPReply类中的一个静态方法,用于检查FTP服务器响应码是否表示成功完成。如果响应码是正常的完成码(2xx),例如 200 或者 250,那么isPositiveCompletion方法将返回 true。

因此,if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON")))这个条件语句将判断FTP服务器是否支持UTF-8编码,如果返回值为 true,表示服务器支持,并且可以在之后的文件传输中使用UTF-8编码模式。

 在FTP协议中,客户端和服务器之间的通信使用的是ASCII编码。但是,有些文件名或文件内容可能使用的是非ASCII字符集,例如UTF-8或GBK等。如果客户端和服务器之间使用的编码方式不同,则可能会导致文件名或文件内容在传输过程中出现乱码。 为了解决这个问题,FTP协议支持使用OPTS命令来设置客户端和服务器之间的编码方式。

ftpClient = FtpTest.getFTPClient(ftpHost, ftpPort, ftpUserName,
					ftpPassword);
			if (FTPReply.isPositiveCompletion(ftpClient.sendCommand(
					"OPTS UTF8", "ON"))) { //$NON-NLS-1$ //$NON-NLS-2$
				LOCAL_CHARSET = "UTF-8"; //$NON-NLS-1$
			}
			ftpClient.setControlEncoding(LOCAL_CHARSET);
			ftpClient.enterLocalPassiveMode();
			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			ftpPath = new String(ftpPath.getBytes(LOCAL_CHARSET), "iso-8859-1"); //$NON-NLS-1$
			String remoteFileName = ftpPath;

ftp下载文件根据 上传的编码方式下载 

 List<PmTaskDoc> docList = []
                JSONArray docArray = new JSONArray()
                FTPClient ftpClient = new FTPClient();
                //连接FTP服务器
                //ftpClient.setControlEncoding("utf8");
                ftpClient.connect(FtpFileStorage.ftpIP, Integer.parseInt(FtpFileStorage.ftpPort));
                //登录FTP服务器
                ftpClient.login(FtpFileStorage.ftpUser, FtpFileStorage.ftpPassword);
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();
                ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
                //this.ftp.setControlEncoding("GBK");
                String LOCAL_CHARSET = "GBK";
                if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {
                    System.out.println("FTP OPTS UTF8 is ON");
                    LOCAL_CHARSET = "UTF-8";
                }
                fileDatas.each { FileData fileData ->
                    SysFile sysFile
                    if (fileData.fileByte == null){
                        String fullpath = fileData.filename;
                        String[] parts = fullpath.split("/"); // 使用斜杠(/)为分隔符将路径拆分成多个部分
                        parts = Arrays.copyOfRange(parts, 1, parts.length);
                        String lastDirectoryName = parts[parts.length - 1];
                        FTPFile[] fs
                        for (int i =0;i<parts.length;i++){
                                byte[] encoded = parts[i].getBytes(LOCAL_CHARSET);
                                parts[i] = new String(encoded, "iso-8859-1")
                            if (!ftpClient.getReplyCode()){
                                break
                            }
                            if (i == parts.length-1){
                                String name = parts[i]
                                InputStream inputStream =ftpClient.retrieveFileStream(name);
                                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                                byte[] buffer = new byte[1024];
                                int bytesRead;
                                while ((bytesRead = inputStream.read(buffer)) != -1) {
                                    byteArrayOutputStream.write(buffer, 0, bytesRead);
                                }
                                byte[] byteArray = byteArrayOutputStream.toByteArray();

                                ByteBuffer byteBuffer = ByteBuffer.allocate(byteArray.length);
                                byteBuffer.put(byteArray);

                                inputStream.close();
                                byteArrayOutputStream.close();

                                sysFile = FileStorageFactory.getStorage("local").upload(byteArray, lastDirectoryName)
                                break
                            }
                            if (!ftpClient.changeWorkingDirectory(parts[i])) {
                                throw new MajorException(String.format('thrift调用writeTestFile接口上传附件:使用ftp长传附件时切换目录失败%s',fileData.filename))
                            }
                        }

                    }
}
ftpClient.logout();
ftpClient.disconnect();

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值