我的android应用正在尝试将文件上传到SFTP Web服务器上,该服务器恰好是我的大学服务器的子域,在其中我有权使用服务器空间的某些部分。我正在使用JSch库。 我已经将根文件夹和WWW文件夹的权限都设置为777,这是屏幕截图:

这是我的Android活动中的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;
    }

}

我得到以下Logcat:

 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)

此外,我已在清单中授予了从外部存储读取和写入的权限。 拒绝权限的可能原因是什么?

===============>>#1 票数:1 已采纳

这可能是路径问题。

登录时,您通常会进入一个没有写权限的默认目录。

如果是这种情况,则需要在放入文件之前将CD放入拥有写入权限的正确目录,或者将文件放入完整路径。

===============>>#2 票数:0

您是否在清单中允许INTERNET权限?

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

ssh返回“权限被拒绝”时,我遇到了同样的问题,这是因为该应用程序本身不允许互联网访问。

===============>>#3 票数:0

实际上,您的代码效果很好。 对我们而言,较小的修改对我们有用(当然主机和密码也是如此)。

分享我们所做的不同的事情。 我们将文件名列表作为数组传递。 或者您可以单独进行。

String appFilePath = Environment.getExternalStorageDirectory().toString() + "/MyCameraApp";
ArrayList<String> files_to_upload = getFileNames(GetFiles(appFilePath));


File exportFile = new File(root, files_to_upload[0].get(iFile));  //This should be your example -> IMG_20140206_212035.jpg

boolean conStatus = false;
Session session = null;
.... your code above
//sftp.put("/sdcard/MyCameraApp/IMG_20140206_212035.jpg", "/");
sftp.put(new FileInputStream(exportFile), exportFile.getName());

  ask by parth translate from so

未解决问题?本站智能推荐: