FTPClient 在上传到 android 上的 ftp 服务器时损坏图像?
Posted
技术标签:
【中文标题】FTPClient 在上传到 android 上的 ftp 服务器时损坏图像?【英文标题】:FTPClient corrupts the images while uploading to ftp server on android? 【发布时间】:2011-09-05 19:33:01 【问题描述】:我正在尝试将图像从 android 手机 (HTC Desire HD) 上传到 FTP 服务器(在我的本地 PC 上)。图像将发送到 FTP 服务器,但它们已损坏。
并且方法(ftpClient.storeFile())抛出IOException(Bad File Number)
请帮帮我。
这是损坏的图片链接:
http://imageshack.us/photo/my-images/820/komikb.jpg/
这是代码:
FTPClient ftpClient = new FTPClient();
try
ftpClient.connect("192.168.2.14");
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
ftpClient.setSoTimeout(10000);
ftpClient.enterLocalPassiveMode();
if(ftpClient.login("Administrator", "xxxx"))
File sFile=new File("mnt/sdcard/DCIM/komik.jpg");
FileInputStream fs= new FileInputStream(sFile);
String fileName = sFile.getName();
Boolean result = ftpClient.storeFile("/ftpfile.atspace.co.uk/" + fileName, fs);
String has = "";
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
【问题讨论】:
我会说它被缩短了几个字节,并没有真正损坏。 +1 为(否则很可爱)绣球花上的优秀圆圈。 如果文件是图像则没有。但是如果文件类型是音频,则音频文件没有播放。 会不会是被issues.apache.org/jira/browse/NET-409咬了? @osman:请说明问题是如何解决的。它可能会帮助其他人解决同样的问题。您可以自己添加一个答案来解释问题所在。 【参考方案1】:Apache FTP 客户端对此有几个突出的问题。下面是关于如何使用 Ftp4J 通过 java 以编程方式有效处理 ftp 的说明。
下载Ftp4J:http://www.sauronsoftware.it/projects/ftp4j/download.php
然后在你的 IDE 中:
import java.io.File;
import java.io.IOException;
import it.sauronsoftware.ftp4j.FTPAbortedException;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPDataTransferException;
import it.sauronsoftware.ftp4j.FTPException;
import it.sauronsoftware.ftp4j.FTPIllegalReplyException;
public class FTP4J
/**
* @param args
* @throws FTPAbortedException
* @throws FTPDataTransferException
* @throws FTPException
* @throws FTPIllegalReplyException
* @throws IOException
* @throws IllegalStateException
*/
public static void main(String[] args) throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException
FTP4J ftp= new FTP4J();
ftp.transfer();
private void transfer() throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException
FTPClient client = new FTPClient();
client.connect("192.168.0.1"); //conect to FTP server (in my case a vsftp on centos 6.4)
client.login("admn", "admn123");//login to FTP Server
client.changeDirectory("/usr/share/tomcat/webapps/imgs/"); //tell FTP4J where on the Ftp Server to send your file that you want to upload.
File fileUpload = new File ("C:\\Users\\ih8w8\\Pictures\\1.jpg"); //point FTP4J to the file you want to upload
client.upload(fileUpload); //upload it
client.disconnect(true); //close connection (note: you could also log out first, then disconn if youre not in a test env)
【讨论】:
如何指定要上传的文件名?【参考方案2】:问题解决了。 FTPClient 类有“最后一个数据包数据丢失错误”。但这已通过 3.0.1 23.05.2011 版本解决。
你可以从关于bug的详细解释中看到: https://issues.apache.org/jira/browse/NET-409
您可以下载固定版本 https://repository.apache.org/content/repositories/snapshots/commons-net/commons-net/3.0.1-SNAPSHOT/
【讨论】:
嗨,奥斯曼,我正在使用 3.0.1 和您上面编写的代码,但它对我不起作用。图像正在上传但已损坏。 png 图像甚至不显示。你能指导我吗??..谢谢 嗨 sujit,apache FTPClient 有很多错误。这个问题就解决了。后来出现了另一个问题,我开始使用ftp4j。这是链接:sauronsoftware.it/projects/ftp4j我建议你使用这个组件。 你确定这个 ftp4j 没有问题吗?以上是关于FTPClient 在上传到 android 上的 ftp 服务器时损坏图像?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA利用commons.net.ftp.FTPClient的storeFileStream方法TXT文件上传. 已经转码UTF-16LE,上传后内容乱码