我一直在使用JakartaFtpWrapper将文件从客户端Java应用程序上传到我的服务器(用于备份)。
上传的文件是文本文件,png文件和jpgs。
我注意到在本地计算机上有效的jpg文件 - 在某种程度上变得不可读(损坏的文件)在服务器上(它们被FTPd到)。 图像文件大小与原始文件大小相似,但不知何故它被剔除了。
这是我用来将jpg写入LOCAL磁盘的代码:
public static void writeJpeg(BufferedImage bfImg, String fileName, float quality) throws IOException{
FileImageOutputStream output = null;
try{
Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = (ImageWriter)iter.next();
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(quality); // an integer between 0 and 1
File file = new File(fileName);
output = new FileImageOutputStream(file);
writer.setOutput(output);
IIOImage image = new IIOImage(bfImg, null, null);
writer.write(null, image, iwp);
}
finally{
if (output != null){
output.close();
}
}
ftp代码很简单:
JakartaFtpWrapper ftpClient = new JakartaFtpWrapper();
ftpClient.connectAndLogin(FTP_URL, FTP_USER, FTP_PASSWORD);
ftpClient.setPassiveMode(true);
File[] imageFiles = folder.listFiles()
for (int j=0; j<imageFiles.length; j++){
File imageFile = imageFiles[j];
if (imageFile != null && imageFile.isFile() && (FileUtils.getFileSuffix(imageFile).equals("jpg") || FileUtils.getFileSuffix(imageFile).equals("png"))){ // upload only image files
ftpClient.uploadFile(imageFile.getAbsolutePath(), imageFile.getName());
}
}
谢谢, 然
答案 0 :(得分:1)
服务器上运行了什么?它是一个“开箱即用”的FTP服务器还是你写的东西?
图像是二进制数据。如果JakartaFtpWrapper提供了将FTP传输放入二进制模式的一些选项,那么你应该这样做;我认为问题的最可能原因是在文本模式下处理传输的错误默认尝试。如果您按字节比较小图像,则应在0x0d
旁边添加或删除Carriage Returns((char)0x0a
==(char)13)。如果是这样,那就是你的问题。