我试图从我的服务上传文件。我是这样做的:
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$1.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)
我做错了什么我在清单中也有读写权限。
答案 0 :(得分:1)
错误No such file
可能会产生误导 - 我猜这不是关于您的源文件,而是关于您的目标目录。
您正在为JSch提供目的地<SPACE>/var/www/webimages/client/88/"
- 尝试修剪它。
开源的好处在于它是开源的:您可以查看抛出异常的真实line of code。 (一句警告:我不确定你是否想这样做......) 错误代码和消息似乎都是从缓冲区读取的,因此很明显错误不是来自您的设备,而是来自服务器。
查看课程的开头,甚至会a constant定义您的错误代码2
:SSH_FX_NO_SUCH_FILE
。