android 上的 JSch 中没有这样的文件

no such file in JSch on android

我正在尝试通过我的服务上传文件。我这样做是这样的:

JSch ssh = new JSch();
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");

session = ssh.getSession("****", "*myIP*");
session.setPassword("*******");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
sftp.put(f + "/" + file, " /var/www/webimages/client/88/");
} catch (JSchException e) {
    e.printStackTrace();
} catch (SftpException e) {
    e.printStackTrace();
} finally {
    if (channel != null) {
        channel.disconnect();
    }
    if (session != null) {
        session.disconnect();
    }
}

这是我正在尝试使用的脚本。图片文件是这样找到的:

final String pathToWatch = android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera/";
Toast.makeText(this, "My Service Started and trying to watch " + pathToWatch, Toast.LENGTH_LONG).show();
observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card

    @Override
    public void onEvent(int event, String file) {
        if (event == FileObserver.CREATE && !file.equals(".probe")) {
            Log.d(TAG, "File created [" + pathToWatch + file + "]");

            String inputFileName =Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/Camera/";
            File f = new File(inputFileName);

f 在这种情况下是:/storage/emulated/0/DCIM/Camera/IMG_20150512_124943.jpg

尝试上传时我收到此错误日志:

 2: No such file
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:594)
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at com.geniusgentlemen.support_classes.service.BackgroundSpeebee.onEvent(BackgroundSpeebee.java:82)
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:122)
05-12 12:49:45.311    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at android.os.FileObserver$ObserverThread.observe(Native Method)
05-12 12:49:45.312    5070-5454/com.geniusgentlemen.gp_android_app W/System.err﹕ at android.os.FileObserver$ObserverThread.run(FileObserver.java:85)

我做错了什么我的清单中也有读写权限。

错误 No such file 可能会产生误导 - 我想这与您的源文件无关,而是与您的目标目录有关。

您正在为 JSch 提供目的地 <SPACE>/var/www/webimages/client/88/" - 尝试 trim 它。

开源的好处在于它是开源的:你可以看看真正的line of code抛出异常的地方。 (警告:我不确定你是否想这样做......) 错误代码和消息似乎都是从缓冲区中读取的,因此很明显错误不是来自您的设备,而是来自服务器。

查看 class 的开头,甚至还有 a constant 错误代码 2 定义:SSH_FX_NO_SUCH_FILE.