javascript - 我应该将什么从强大传递到云端,我尝试了不起作用的图像路径/名称
问题描述
我在 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, (err, fields, 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, function (error, result) {
console.log(result, error);
});
});
});
解决方案
对于遇到此问题的其他人,您可以传递作为 rawData 变量的缓冲区,并且像这样工作
const form = new formidable.IncomingForm();
form.uploadDir = "./";
form.keepExtensions = true;
form.parse(req, (err, fields, files) => {
console.log(JSON.stringify(files));
console.log(files.image.path);
var oldPath = files.image.path;
var rawData = fs.readFileSync(oldPath);
console.log(rawData);
let cld_upload_stream = cloudinary.uploader.upload_stream(
{
folder: "sick-fits"
},
function(error, result) {
console.log(error, result);
}
);
streamifier.createReadStream(rawData).pipe(cld_upload_stream);
推荐阅读
- laravel - Laravel,Vue Js 与 Vuetify 和 Vuelidate
- android - Android导航组件未显示正确的操作栏标题
- c# - EntityFramework核心错误“值不在预期范围内”
- python - 从 celery 功能进行推送通知
- ios - iOS - 占用水平 UIStackView 中的所有可用空间
- django - Django,如何获取forignkey相关对象的属性
- python - 如何通过 API Gateway 从 Jupyter Notebook 更新 DynamoDB?
- javascript - 打字稿和 ...args
- r - 如何使用 Shiny R 中的 downloadHandler 将多个 csv 文件下载到 zip 中
- html - 为 flexbox 列表设置固定间距