java使用FtpClient上传图片文件

本文详细介绍了如何在Java中使用FtpClient组件将图片文件上传到FTP服务器,过程中特别提到一种技巧,即先将图片文件命名为.tmp,待上传成功后再将其名字改为实际名称,确保文件完整无误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先将文件命名为.tmp,上传成功后修改名字。

public static boolean uploadImageByCommonFtpSe(File localImage, String imageRelativePath){
		if(localImage == null || !localImage.exists()){
			log.error("本地文件不存在");
			return false;
		}else if(imageRelativePath==null || "".equals(imageRelativePath)){
			log.fatal("服务器路径为空");
			return false;
		}else{
			//上述代码为从配置文件中获取相关FTP服务器信息
			FTPClient ftpClient = new FTPClient();
			try {
				ftpClient.connect(FTP_SERVER_IP);
				boolean loginStatus =	ftpClient.login(FTP_SERVER_USER, FTP_SERVER_PASSWORD);
				if(loginStatus){
					//设置上传的文件类型为图片
					ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
					//截取最后一次 "/" 出现的位置, 作为FTP路径
					String relativePath = "";
					if(imageRelativePath.startsWith("/")){
						relativePath = imageRelativePath.substring(1, imageRelativePath.lastIndexOf("/"));
					}else{
						relativePath = imageRelativePath.substring(0, imageRelativePath.lastIndexOf("/"));
					}
					//截取最后一次 "/" 出现的位置, 从该位置之后的内容作为文件名
					String fileName = imageRelativePath.substring(imageRelativePath.lastIndexOf("/") + 1);
					//为了避免文件还没有被传输完成,就被服务器端程序移走,从而造成图片花屏现象,因此,在文件上传时,指定一个临时文件名, 格式为 正式文件名+".tmp"
					String fileNameTemp = fileName+".tmp";
					
					//递归建立文件夹
					String[] mkds = relativePath.split("/");
					String curpath ="";
					boolean mkdFlag = false ;
					boolean changeDirectoryFlag = false ;
					for(int i =0 ;i<mkds.length;i++){
						if(mkds[i]!=null && mkds[i]!=""){
							mkdFlag = ftpClient.makeDirectory(mkds[i]);
							if(mkdFlag){
								log.info("目录创建成功!");
							}else{
								log.info("目录已经存在.");
							}
							changeDirectoryFlag = ftpClient.changeWorkingDirectory(mkds[i]);
							if(changeDirectoryFlag){
								log.info("当前目录["+mkds[i]+"].");
							}else{
								log.error("切换目录失败.");
							}
						}
					}
					log.info("开始上传文件["+fileNameTemp+"].");
					boolean changeStoreFileFlag = ftpClient.storeFile(fileNameTemp, new FileInputStream(localImage));
					if(changeStoreFileFlag){
						ftpClient.rename(fileNameTemp, fileName);
						log.info("文件["+fileNameTemp+"]重命名为["+fileName+"].");
					}else{
						log.error("文件上传失败.");
					}
					
					boolean logoutFlag = ftpClient.logout();
					return true;
				}else{
				}
			} catch (SocketException e1) {
				log.error("连接ftp服务器出错",e1);
			} catch (IOException e1) {
				log.error("连接ftp服务器出错",e1);
			}finally{
				try {
					ftpClient.disconnect();
				} catch (IOException e) {
					log.error(e);
				}
			}
			return false;
		}
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值