我正在尝试从节点中的远程SFTP服务器加载文件。js应用程序。我使用ssh2 sftp客户端库来完成此任务。不幸的是,我犯了错误。我做错了什么?
当我使用这样的代码时,它会正确地返回远程SFTP服务器路径中所有文件的列表。
router.get('/', (req, res) => {
sftp.connect(config.sftpServer).then(() => {
return sftp.list('/reports')
}).then((data) => {
console.log(data)
}).catch((error) => {
console.log(error)
})
})
在控制台中,我看到这样的结果:
[ { type: '-',
name: '1548244803285.csv',
size: 74589,
modifyTime: 1548278757000,
accessTime: 1548513471000,
rights: { user: 'rwx', group: 'rwx', other: 'rwx' },
owner: 1030,
group: 1022 } ]
如果我尝试使用fastGet
方法下载特定文件,请单击Node。js引发错误。
return sftp.fastGet('/reports/1548244803285.csv', path.join(process.env.HOME || process.env.USERPROFILE, 'downloads/'))
错误:
Error: Failed to get /reports/NNogerbek1548244803285.csv: EISDIR: illegal operation on a directory, open 'C:\Users\NNogerbek\downloads'
at C:\Users\NNogerbek\WebstormProject\web-app\node_modules\ssh2-sftp-client\src\index.js:192:16
at cbfinal (C:\Users\NNogerbek\WebstormProject\web-app\node_modules\ssh2-streams\lib\sftp.js:1038:11)
at SFTPStream._transform (C:\Users\NNogerbek\WebstormProject\web-app\node_modules\ssh2-streams\lib\sftp.js:389:17)
at SFTPStream.Transform._read (_stream_transform.js:190:10)
at SFTPStream._read (C:\Users\NNogerbek\WebstormProject\web-app\node_modules\ssh2-streams\lib\sftp.js:183:15)
at SFTPStream.Transform._write (_stream_transform.js:178:12)
at doWrite (_stream_writable.js:410:12)
at writeOrBuffer (_stream_writable.js:394:5)
at SFTPStream.Writable.write (_stream_writable.js:294:11)
at Channel.ondata (_stream_readable.js:666:20)
我用来连接到remore SFTP服务器的用户有权读取、写入。不明白有什么问题。
嗯,我终于找到了问题的原因EISDIR
表示应用程序试图对文件执行某些操作,但它是一个目录。
正确的代码是:
return sftp.fastGet('/reports/1548244803285.csv', path.join(process.env.HOME || process.env.USERPROFILE, 'downloads/1548244803285.csv'))
现在我想返回浏览器中的文件作为响应。如何正确制作?
这是我最后的工作代码:
router.post('/', (req, res) => {
const fileName = req.body.file_name;
const remotePath = '/put_your_path_here/' + fileName;
const localePath = path.join(process.env.HOME || process.env.USERPROFILE, 'Downloads/' + fileName);
sftp.connect(config.sftpServer, 'once').then(() => {
sftp.fastGet(remotePath, localePath, {}).then(() => {
res.header('Content-type', 'text/csv; charset=windows-1251');
res.sendFile(localePath);
sftp.end();
}).catch((err) => {
sftp.end();
console.log(err, 'fastGet method error');
})
}).catch((err) => {
sftp.end();
console.log(err, 'connect method error');
});
});
问题内容: 我是一个Node.js新手,并且正在用它创建我的第一个大型应用程序(我正在使用Express)。当用户使用get请求加载ID时,我需要让我的网页执行一些javascript画布绘制 我知道我可以用一个简单的方法来处理 但我不知道如何使用该ID的要求的图纸开始我的网页。互联网上Express和Get上的每个教程都说明了如何处理get请求…这个问题是关于“接下来会发生什么?” 改写:我不确
问题内容: 我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它: 但是,当尝试使用“ node app.js”从app.js调用它时,我得到: 我意识到,D3的作者在其他地方已经明确规定了应该使用画布: https://github.com/mbost
问题内容: 我正在尝试编写一个nodejs服务器,该服务器将花费一个时间输入(可能是url路径的一部分),然后在该时间索引处以jpeg图片的形式提供静止的视频帧。 我可以用普通的Javascript轻松地做到这一点,但是我看不到在nodejs中做到这一点的方法。我知道我可能需要使用像node- canvas这样的画布插件来做快照。 任何想法欢迎。 以下是我目前在Javascript中的处理方式:
问题内容: 在Objective-c中,我们可以像这样对字符串进行哈希处理: 但是CC_MD5在Swift中不起作用。我们该如何处理? 问题答案: 这就是我想出的。它是String的扩展。不要忘了添加到Xcode创建的ObjC-Swift桥接头中。
问题内容: 我想将一些div转换为PDF,并且尝试了jsPDF库,但没有成功。看来我不明白我需要导入什么才能使库正常工作。我已经看过这些示例,但仍然无法弄清楚。我尝试了以下方法: 在jQuery之后: 用于测试目的,但我收到: 身体的第一个div 在哪里。 问题答案: 您可以按如下方式使用html中的pdf, 步骤1:将以下脚本添加到标题 步骤2:添加HTML脚本以执行jsPDF代码 对此进行自定
问题内容: 我如何获得本地IpAddress? 当我使用该功能时,我将无法再继续使用。我不能使用该功能。 是否有其他方法可以执行此操作,或者我是否以错误的方式进行操作? 问题答案: 在讨论中发现,OP需要Mac上的接口地址,而不是我最初想的那样在iOS设备上。问题中引用的代码将检查接口名称“en0”,它是iPhone上的WiFi接口。在Mac上,改为检查任何“正在运行”的界面更有意义。因此,我重写