问题描述
我对 Next JS 中的流进行了以下解析,该流正在获取图像的文件输入,看起来它存储了图像以供我传递给 cloudinary,但 cloudinary 表示该图像不存在。
const form = new formidable.IncomingForm();
form.uploadDir = "./upload";
form.keepExtensions = true;
form.parse(req,(err,fields,files) => {
console.log(JSON.stringify(files));
const path = files.image.path + "/" + files.image.name
cloudinary.uploader.upload(path,function (error,result) {
console.log(result,error);
});
});
这是解析中的图像路径和名称
{"image":{"size":35168,"path":"./upload/1547db49054ff2a2acb915a03","name":"test.png","type":"image/png","mtime":"2021-03-12T03:46:20.002Z"}}
这里是来自 cloudinary 的错误
[Error: ENOENT: no such file or directory,open './upload/7e1c5b9e3235ae38d12097300/test.png'] {
errno: -2,code: 'ENOENT',syscall: 'open',path: './upload/7e1c5b9e3235ae38d12097300/test.png'
}
我一定在这里错过了一些基本的东西。
更新:我试过用 fs 写信,但仍然没有运气。不太明白。图像是否曾经保存过以便我可以将其传递给 cloudinary。
const form = new formidable.IncomingForm();
form.uploadDir = "./";
form.keepExtensions = true;
form.parse(req,files) => {
console.log(JSON.stringify(files));
console.log(files.image.path);
var oldpath = files.image.path;
var newPath = path.join(__dirname,"upload") + "/" + files.image.name;
var rawData = fs.readFileSync(oldpath);
fs.writeFile(newPath,rawData,function (err) {
console.log(newPath);
const path = newPath;
cloudinary.uploader.upload(path,result) {
console.log(result,error);
});
});
});
解决方法
对于遇到此问题的任何其他人,您可以传递作为 rawData 变量的缓冲区,并像这样工作
canvas {
display: none
}
@media print {
body * {
visibility: hidden;
}
canvas {
visibility: visible;
margin-top: 30%;
}
.form-control {
visibility: visible;
}
.final-results * {
visibility: visible;
}
.spider-chart * {
visibility: visible;
}
.final-results,.form-control {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
}
table,table tr th,table tr td {
border: 1px solid black;
}