首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否为从ssh2-sftp-client中的缓冲区上传的文件指定名称?

是否为从ssh2-sftp-client中的缓冲区上传的文件指定名称?
EN

Stack Overflow用户
提问于 2018-03-28 10:10:43
回答 1查看 1.1K关注 0票数 7

我很难通过ssh2- sftp -client (https://www.npmjs.com/package/ssh2-sftp-client)从buffer上传文件我正在使用Multer上传文件,然后我的目标是让req.file.buffer像这样通过sftp客户端访问要上传的数据:

代码语言:javascript
复制
sftp.connect({
host: 'some.IP.address.here',
port: '22',
username: 'username',
password: 'password'
})
.then(() => {
return sftp.put(req.file.buffer, '/var/www/bucket', false);
})
.catch((err) => {
console.log(err, 'catch error');
});

我不知道如何为存储在Multer对象的req.file.originalname中的上传文件命名。

顺便说一下,ssh2-sftp-client返回以下错误:

Error: Failure image.routes.js:39 code:4 lang:"" message:"Failure" stack:"Error: Failure\n at SFTPStream._transform (/Users/petrfila/Apps/lifeIQ/liq-api/node_modules/ssh2-streams/lib/sftp.js:410:27)\n at SFTPStream.Transform._read (_stream_transform.js:185:10)\n at SFTPStream._read (/Users/petrfila/Apps/lifeIQ/liq-api/node_modules/ssh2-streams/lib/sftp.js:181:15)\n at SFTPStream.Transform._write (_stream_transform.js:173:12)\n at doWrite (_stream_writable.js:406:12)\n at writeOrBuffer (_stream_writable.js:392:5)\n at SFTPStream.Writable.write (_stream_writable.js:290:11)\n at Channel.ondata (_stream_readable.js:646:20)\n at Channel.emit (events.js:127:13)\n at addChunk (_stream_readable.js:269:12)\n at readableAddChunk (_stream_readable.js:256:11)\n at Channel.Readable.push (_stream_readable.js:213:10)\n at SSH2Stream.<anonymous> (/Users/petrfila/Apps/lifeIQ/liq-api/node_modules/ssh2/lib/Channel.js:166:15)\n at SSH2Stream.emit (events.js:127:13)\n at parsePacket (/Users/petrfila/Apps/lifeIQ/liq-api/node_modules/ssh2-streams/lib/ssh.js:3444:10)\n at ... __proto__:Object {constructor: , name: "Error", message: "", …} constructor:function Error() { … } message:"" name:"Error" toString:function toString() { … } __proto__:Object {constructor: , __defineGetter__: , __defineSetter__: , …} catch error

EN

回答 1

Stack Overflow用户

发布于 2019-09-17 17:04:42

有点晚了,但以防万一……

您使用的版本有一点buggy,并且错误处理能力非常差。此问题已在更高版本中得到解决。此外,对相对路径名的处理也不一致。此问题也已修复。

要上传文件并为其指定远程文件名,请确保远程路径包括文件名,而不仅仅是目标目录。

代码语言:javascript
复制
let client = new Client();
client.connect(config)
.then(() => {
   return client.put(buffer.data, '/path/to/new-file-name');
.then(f => {
   console.log(`File uploaded to ${f}`);
.catch(err => {
  console.log(`Error: ${err.message}`);
});

put指出,如果只使用本地文件名,而不是缓冲区或流,则可以使用fastPut(),它比NOte ()更快,因为它是并行传输的。但是,它只能处理路径名称字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49525003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档