2014-04-19 7 views
0

내 안드로이드 응용 프로그램이 SFTP 웹 서버에 파일을 업로드하려고합니다.이 파일은 서버 공간의 일부 영역에 대한 권한이있는 대학 서버의 하위 도메인입니다. 라이브러리. 나는 777에 사용 권한을 설정하는 루트 폴더와 WWW folder.Here의 스크린 샷 모두 : 나는 다음과 같은 로그 캣을 얻을안드로이드 응용 프로그램에서 SFTP 서버로 파일 업로드

public class SFTPConnection extends AsyncTask<Void,Void,Void> 
{ 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     boolean conStatus = false; 
     Session session = null; 
     Channel channel = null; 
     java.util.Properties config = new java.util.Properties(); 
     config.put("StrictHostKeyChecking", "no"); 

     Log.i("Session","is"+conStatus); 
     try { 
      JSch ssh = new JSch(); 
      session = ssh.getSession("pmody", HOST_ADDRESS, 22); 
      session.setPassword("667758482"); 
      session.setConfig(config); 
      session.connect(); 
      conStatus = session.isConnected(); 
      Log.i("Session","is"+conStatus); 
      channel = session.openChannel("sftp"); 
      channel.connect(); 
      ChannelSftp sftp = (ChannelSftp) channel; 
      sftp.put("/sdcard/MyCameraApp/IMG_20140206_212035.jpg", "/"); 
     } catch (JSchException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.i("Session","is"+conStatus); 
     } catch (SftpException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.i("Session","is"+conStatus); 
     } 
     return null; 
    } 

} 

:

여기 내 안드로이드 활동에 SFTP 코드의

3: Permission denied 
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846) 
at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:594) 
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475) 
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365) 
at com.example.locationtest.MainActivity$SFTPConnection.doInBackground(MainActivity.java:351) 
at com.example.locationtest.MainActivity$SFTPConnection.doInBackground(MainActivity.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:287) 
at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
at java.lang.Thread.run(Thread.java:841) 

또한 매니페스트에서 외부 저장소에 대한 읽기 및 쓰기 권한을 부여했습니다. 권한 거부의 가능한 원인은 무엇입니까?

+0

연결에 사용하는 API는 무엇이며 API에 대한 링크도 제공 할 수 있습니까? – reetu

답변

0

아마도 경로 문제 일 수 있습니다.

로그인 할 때 종종 쓰기 권한이없는 기본 디렉토리에 저장됩니다.

이 경우 파일을 저장하기 전에 쓰기 권한이있는 올바른 디렉토리로 cd하거나 전체 경로와 함께 파일을 넣어야합니다.

+0

응답 해 주셔서 감사합니다. 그러나 "ls"에 어떤 방법이 있어도 현재 어느 폴더에 있는지 볼 수 있습니까? – parth

+0

여기를 참조하십시오 : http://stackoverflow.com/questions/13249143/how-to-get-list-of-files-from-sftp-server-in-android – ZRBW

+0

나는 보지 못했지만 아마 또한 " cwd "명령을 사용하면 내용과는 대조적으로 현재 디렉토리를 알 수 있습니다. – ZRBW

-1

매니페스트에 INTERNET 권한을 허용 했습니까?

<uses-permission android:name="android.permission.INTERNET" /> 

ssh가 "permission denied"를 반환하는 것과 동일한 문제가있었습니다. 응용 프로그램 자체가 인터넷 액세스가 허용되지 않았기 때문입니다.

관련 문제