我的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

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

1回复

Android + JCraft JSch SFTP上传-“ org.apache.commons.vfs2.FileSystemException:无法在以下位置连接到SFTP服务器”

我正在尝试使用JCraft的JSch通过SFTP发送文件。 我收到异常“ org.apache.commons.vfs2.FileSystemException:无法在...连接到SFTP服务器”。 看来JSch甚至没有尝试发送用户名和密码。 从OpenSSH服务器端(loglevel =
3回复

使用onClick从远程服务器下载SFTP

我目前正在开发一个应用程序,该应用程序可以打印远程服务器目录中的文件列表,并且能够单击指定的文件并下载。 到目前为止,这就是我所拥有的: 但是,当我单击listView中的文件时,出现跟踪错误: com.jcraft.jsch.JSchException:android.
1回复

Android SFTP断点续传下载文件

在我的项目中,我想使用SFTP下载过程。特别是用于恢复下载。我在我的android下载项目中使用了这个库。 我为此使用了JSCH库。 如果有其他方法或API,我只会知道此库,请告诉我 对于简历下载过程,我遵循其网站上的标准示例。 SFTP简历下载 但是它不起作用..
1回复

使用JSCH通过SFTP下载文件(android)

我正在尝试制作一个使用SFTP从服务器下载文件的应用程序。 每当我运行调试器时,一切似乎都很好,没有错误。 我的日志说它已经下载了指定的文件。 但是,我似乎找不到在设备上任何地方下载的文件。 有什么帮助吗?
1回复

JSCH Sftp printWorkingDirectory

在Apache的百科全书净ftpclient存在ftpClient.printWorkingDirectory()来获得当前目录的字符串。 如何使用jsch sftp客户端实现同一目的? 有一个称为realpath(String)的方法,但它似乎不正确,我无法使其正常工作。 有什么
1回复

jsch sftp-转到父目录

我试图弄清楚如何使用Jsch Sftp转到父目录。 我将当前路径存储在字符串中,并且我猜到该channelSftp.cd(String); 这是我应该使用的。 但是在当前路径上使用子字符串感觉不对。 有一个更好的方法吗?
2回复

如何从Android中的SFTP服务器获取文件列表?

我开发了一个代码,但是没有用。请帮助我。 这是例外:
1回复

将文件复制到SFTP服务器的Jsch示例

以下是我的程序......但是在session.connect()之后这不起作用 而输出是 我的代码控件在session.connect()行之后没有移动。
2回复

文件成功上传,但是使用jsch sftp java在远程服务器上上传了0kb文件

我正在使用Jsch和Sftp协议在一个简单的Java应用程序中将文件从本地计算机上传到远程服务器。 我的代码没有错误也没有异常,并且可以成功运行,但是当我查看远程位置时,文件以0kb的格式上传,没有扩展名,并且名为“ D”。 我已经尝试了很多方法,但是我无法弄清错误。 这是我的
2回复

将Guardian文件上传到Tandem / Compaq / HPE NonStop服务器

我正在使用OpenSSH。 从独立Java程序调用时,bat文件下面的代码可以正确传输文件。 但是,当从部署在weblogic服务器上的war内部的类文件调用bat文件时。 失败并显示以下错误: 无法创建目录'%systemroot%\\ system32 \\ config \