[英]Why is my InputStream not working in Android?
我正在为我最喜欢的图片库软件编写一个用于Android的图片文件上传器,它使用FTP。 基于过去的堆栈溢出问题,我已经开始使用Apache-Commons Net FTP作为ftp库。 像这样:
FTPClient ftp = new FTPClient();
try{
ftp.connect(host);
Log.i(TAG,"we connected");
if(!ftp.login(user,pass)){
ftp.logout();
//TODO: alert user it didn't happen
return;
}
String replyStatus = ftp.getStatus();
Log.i(TAG,replyStatus);
int replyCode = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode))
{
ftp.disconnect();
//TODO: alert user it didn't happen
return;
}
Log.i(TAG,"we logged in");
ftp.changeWorkingDirectory(path);
ftp.setFileType(ftp.BINARY_FILE_TYPE);
for(int i = 0; i < contentUris.size(); i++){
Log.i(TAG,"uploading new file");
Uri stream = (Uri) contentUris.get(i);
//InputStream in = openFileInput(getRealPathFromURI(stream));
InputStream in =this.getContentResolver().openInputStream(stream);
BufferedInputStream buffIn=null;
buffIn=new BufferedInputStream(in);
ftp.setFileType(ftp.BINARY_FILE_TYPE);
boolean Store = ftp.storeFile("test.jpg", buffIn);
Log.i(TAG, "uploaded test");
}
ftp.disconnect();
}
catch(Exception ex){
//do something wise and smart and useful
}
我在日志中看到要登录,可以更改目录,并且在上载时,目录中有一个test.jpg,但大小为0字节。
是什么赋予了? 我没有打开输入流吗? 我该怎么做呢?
如果我没有提供足够的细节,请告诉我- 完整的代码也可以在github上找到
看来问题在于您无法建立主动ftp连接,必须使用被动模式。 因此,将顶部更改为:ftpClient.enterLocalPassiveMode();。
FTPClient ftp = new FTPClient();
try{
ftp.connect(host);
ftp.enterLocalPassiveMode();
Log.i(TAG,"we connected");
if(!ftp.login(user,pass)){
ftp.logout();
//TODO: alert user it didn't happen
return;
}
String replyStatus = ftp.getStatus();
Log.i(TAG,replyStatus);
int replyCode = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode))
{
ftp.disconnect();
//TODO: alert user it didn't happen
return;
}
Log.i(TAG,"we logged in");
ftp.changeWorkingDirectory(path);
ftp.setFileType(ftp.BINARY_FILE_TYPE);
for(int i = 0; i < contentUris.size(); i++){
Log.i(TAG,"uploading new file");
Uri stream = (Uri) contentUris.get(i);
String filePath = getRealPathFromURI(stream);
InputStream in = new FileInputStream(filePath);
ftp.setFileType(ftp.BINARY_FILE_TYPE);
boolean Store = ftp.storeFile("test.jpg", in);
Log.i(TAG, "uploaded test");
}
ftp.disconnect();
}
catch(Exception ex){
//TODO: properly handle exception
//Log.i(TAG,ex);
//TODO:Alert the user this failed
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.