我正在尝试使用UIL从FTP服务器上传图像。为此,我创建了一个FTPImageDownloader
。我使用apache-commons-ftpclient。代码如下:
public class FTPImageDownloader implements ImageDownloader {
public static String FTP_SERVER_HOST = "xx.xx.xxx.xxx";
public static int FTP_SERVER_PORT =xx;
public static String FTP_LOGIN = "xxxxxxx";
public static String FTP_PASSWORD = "xxxxxxx";
@Override
public InputStream getStream(String imageUri, Object extra) throws IOException {
return getFTPStream(imageUri);
}
public InputStream getFTPStream(String url) throws IOException {
FTPClient con = null;
final String imageUrl = url;
try
{
con = new FTPClient();
con.connect(FTP_SERVER_HOST);
if (con.login(FTP_LOGIN, FTP_PASSWORD))
{
con.enterLocalPassiveMode();
con.setFileType(FTP.BINARY_FILE_TYPE);
return con.retrieveFileStream(imageUrl);
}
}
catch (Exception e)
{
Log.v("download result","failed");
e.printStackTrace();
} finally {
con.logout();
con.disconnect();
}
return null;
}}
这很有效,但速度很慢。当我们同时下载多个图像时,这一点尤为明显。
我认为ImageLoader工作缓慢的原因是每张图片都会打开一个新连接。如果是这种情况,那么告诉我如何建立像singleton这样的连接。感谢。
答案 0 :(得分:0)
将队列用于多个网络调用,例如https://github.com/path/android-priority-jobqueue。
答案 1 :(得分:0)
尝试在AndroidManifest.xml
文件中添加互联网权限:
uses-permission android:name="android.permission.INTERNET"
答案 2 :(得分:0)
问题是使用FTP服务器。我们现在迁移到使用Http,一切都很好。如果要从FTP下载图像,问题中显示的代码可以使用,您可以将它与Universal Image Loader结合使用。