node.js - 错误 : EXDEV: cross-device link not permitted, 在 Ubuntu 16.04 LTS 上重命名 '/tmp/

标签 node.js postgresql ubuntu-16.04 cross-device

我在上传文件 nodejs 时遇到问题。我读过了 stack1stack2。但我认为这种情况不同 在这样的终端输出上:

> Unhandled rejection Error: EXDEV: cross-device link not permitted,
> rename '/tmp/31941-53enly.png' ->
> 'public/files/complaint/Screenshot_2016-05-01_01-16-55.png'
>     at Error (native)
>     at Object.fs.renameSync (fs.js:681:18)
>     at null.<anonymous> (/home/faris/myprojects/orchestrale-server/routes/complaintimage.js:163:20)
>     at tryCatcher (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/util.js:16:23)
>     at Promise._settlePromiseFromHandler (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:502:31)
>     at Promise._settlePromise (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:559:18)
>     at Promise._settlePromise0 (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:604:10)
>     at Promise._settlePromises (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:683:18)
>     at Async._drainQueue (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/async.js:138:16)
>     at Async._drainQueues (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/async.js:148:10)
>     at Immediate.Async.drainQueues [as _onImmediate] (/home/faris/myprojects/orchestrale-server/node_modules/sequelize/node_modules/bluebird/js/release/async.js:17:14)
>     at processImmediate [as _immediateCallback] (timers.js:383:17)

我的代码:

  if (_.isEmpty(req.files) == false) {
      var tp = avatar_folder+req.files.file.name;
      fs.renameSync(req.files.file.path, tp, function(err){});
      var avatar = req.files.file.name;
      }

代码可以在另一个发行版(如 elementary os)上运行,但是当我在 debian jessie 或 ubuntu 16 LTS 上运行项目时,终端会出现错误。

没有人能帮忙吗?该代码在 elementary os 和 arch 上完美运行。

最佳答案

同样的问题。解决方法:读取临时文件,将文件写入新位置并删除临时文件:

        // Read the file
        fs.readFile(oldpath, function (err, data) {
            if (err) throw err;
            console.log('File read!');

            // Write the file
            fs.writeFile(newpath, data, function (err) {
                if (err) throw err;
                res.write('File uploaded and moved!');
                res.end();
                console.log('File written!');
            });

            // Delete the file
            fs.unlink(oldpath, function (err) {
                if (err) throw err;
                console.log('File deleted!');
            });
        });

关于node.js - 错误 : EXDEV: cross-device link not permitted, 在 Ubuntu 16.04 LTS 上重命名 '/tmp/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37153666/

相关文章:

javascript - Passport.use 不是一个函数

sql - 同一实体内的属性与查询/ View 之间的关系

Postgresql 参数问题 $1

SQL Select sum and group by 两列

php - FFMPEG 在转换视频时使我的网站关闭

http - 将 JPEG 图像从 HTTP multipart/x-mixed-replace keep-alive 流保存到 ubuntu 服务器

mysql - 是否可以使用 dotnet core、MySQL 以及身份验证和授权来构建 Web Api 应用程序?

node.js - Laravel:npm run watch 错误

node.js - NodejS-Magento Rest API

node.js - 如何在nodejs中将html页面作为电子邮件发送