gpt4 book ai didi

javascript - 对目录的非法操作,打开

转载 作者:行者123 更新时间:2023-11-30 07:00:11 27 4
gpt4 key购买 nike

使用 this answer ,用mkdirp,我想创建一个目录并在里面保存文件。在 plates 内部,这些文件夹将被创建并重复使用(如果存在)。

const fs = require('fs')
const mkdirp = require('mkdirp')

// Decode image then save to local storage
const decodeBase64Image = (string, plateNumber) => {
let regex = /^data:.+\/(.+);base64,(.*)$/
let matches = string.match(regex)
let ext = matches[1]
let data = matches[2]
let buffer = new Buffer(data, 'base64') // I cant use Buffer.alloc()

let pathForImages = `plates/${plateNumber}`

saveImagesToPath(pathForImages, ext, buffer)
}


const saveImagesToPath = (pathForImages, ext, buffer) => {
mkdirp(pathForImages, function (err) {

fs.writeFileSync(pathForImages, 'data.' + ext, buffer)

})
}

let string = "data:image/gif;base64,R0lGODlhPQBEAPeoAJosM//AwO/AwHVYZ/<SHORTEN>w=="

// Performing it all
decodeBase64Image(string, 'HGT5KU')

错误信息:

fs.js:651
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^

Error: EISDIR: illegal operation on a directory, open 'plates/HGT5KU'

基本上,使用车牌号名称为“plates”创建一个子文件夹,并将数据保存在该文件夹中:plates/HGT5KU/foo.png 其他:plates/GFTYU7/bar.jpg

最佳答案

你告诉 fs.writeFileSync 写入目录,而不是目录中的文件:

mkdirp(pathForImages, function (err) {
fs.writeFileSync(pathForImages, 'data.' + ext, buffer)
// ----------------^^^^^^^^^^^^
})

当然会失败。您需要在路径中添加文件名:

mkdirp(pathForImages, function (err) {
const filename = /*...create appropriate filename...*/;
fs.writeFileSync(pathForImages + "/" + filename, 'data.' + ext, buffer)
})

旁注:

  1. 忽略错误通常不是好的做法。 mkdirp 可能会失败,您需要检查err

  2. 由于 mkdirp 是异步的,因此在其中使用同步调用是没有意义的,并且不必要地占用 JavaScript 线程。只需使用 writeFile。一般来说,如果没有真正充分的理由使用它们,请避免使用xyzSync函数。

  3. 可能最好也测试来自 writeFileSync/writeFile 的错误。 :-)

关于javascript - 对目录的非法操作,打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719811/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com