windows中nodejs使用fs.unlink出现resource busy or locked的解决方案

 xiezixing @ 2019-01-18 22:19:45

今天遇见一个非常奇怪的问题,就是在windows中安装的nodejs应用,使用fs.unlinksync出现以下错误:

Error: EBUSY: resource busy or locked, unlink './public/videos/5c41d42378ce490ed
89f7e6c/1.jpg'
    at Object.unlinkSync (fs.js:952:3)

经过我多方查找,无论是百度和谷歌,找了很久也没有结论,直到我看见github中关于sharp的一个issue,才找到解决方案,原来在windows中使用sharp剪切编辑图片的时候,会一直将文件锁定,当你需要进行删除操作的使用,比如fs.unlinksync的时候就会出现上面提示的错误。

Error: EBUSY: resource busy or locked

错误是说文件繁忙或者被锁定,这里就是因为sharp把文件锁定了,所以fs.unlinksync就没办法删除了。

我同样找到了解决方案,那就是不要直接使用图片文件传入sharp进行剪切缩小尺寸的操作,而使用fs.readFile将图片读取成data数据,再将data数据传入sharp进行剪切等操作。代码如下:

fs.readFile(imgfile, (err, data) => {
                if (err) {
                  console.log(
                    "Error reading file " + fileIn + " " + err.toString()
                  )
                } else {
                  sharp(data)
                    .resize(730, 410)
                    .toFile(des + "/730.jpg", err => {
                      if (err) {
                        console.log(err)
                      }
                    })
                  sharp(data)
                    .resize(350, 197)
                    .toFile(des + "/350.jpg", err => {
                      if (err) {
                        console.log(err)
                      }
                    })
                }
              })

如此,在后面进行删除操作的时候就不会再提示错误。