[英]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.