无法从 NodeJS 中的 Cloudinary 获取 image_id
Can't get image_id from Cloudinary in NodeJS
我正在使用 Node.js 和 Express。我只是实现 Cloudinary 从用户上传图像,并将图像 ID 存储到我的 MySQL 数据库中。
我尝试了 Cloudinary 文档中的教程:http://cloudinary.com/documentation/node_image_upload。一切正常,除了最后一步,我需要获取 image_id
。
var url = require('url')
var url_parts = url.parse(req.body.coverurl, true)
console.log(url_parts) //DEBUG
var query = url_parts.query
console.log(query) //DEBUG
var preloaded_file = new cloudinary.PreloadedFile(query.image_id)
if (preloaded_file.is_valid()) {
var image_id = preloaded_file.identifier()
console.log("Img ID:" + image_id)
} else {
console.log("Invalid upload signature")
}
req.body.coverurl
类似于:image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png#f63f1fe77c7f536447e079f3dd10829b5a15d862
url_parts
是:
{ protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: '#f63f1fe77c7f536447e079f3dd10829b5a15d862',
search: '',
query: {},
pathname: 'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png',
path: 'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png',
href: 'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png#f63f1fe77c7f536447e079f3dd10829b5a15d862' }
并且...,变量 query
为空。 query.image_id
无效所以无法获取图片id,也无法验证签名。
我不知道为什么 Cloudinary 会给出这个无效的回调字符串。或者我该如何解决这个问题。
感谢您的帮助。请原谅我糟糕的英语:)
更新
我的submit_idea.hbs
<form action="/submit/idea" method="POST">
{{{imgtag}}} <!-- this will render from: cloudinary.uploader.image_upload_tag('coverurl') -->
<button type="submit">Save</button>
</form>
在我的 routes/submit.js
router.get('/submit/idea', function(req, res, next){
// just render the submit_idea.hbs with some Cloudinary variable
})
router.post('/submit/idea', function(req, res, next){
var url = require('url')
var url_parts = url.parse(req.body.coverurl, true)
var query = url_parts.query
var preloaded_file = new cloudinary.PreloadedFile(query.image_id)
if (preloaded_file.is_valid()) {
var image_id = preloaded_file.identifier()
console.log("Img ID:" + image_id)
} else {
console.log("Invalid upload signature")
}
// add image_id to mysql
})
我猜 cloudinary 站点中的文档有误或已过时。尝试如下验证您的上传。它应该工作。
router.post('/submit/idea', function(req, res, next){
/*REMOVE THESE PARTS. I guess these are not needed any more.
var url = require('url')
var url_parts = url.parse(req.body.coverurl, true)
var query = url_parts.query
*/
//Directy pass coverurl to PreloadedFile method.
var preloaded_file = new cloudinary.PreloadedFile(req.body.coverurl)
if (preloaded_file.is_valid()) {
var image_id = preloaded_file.identifier()
console.log("Img ID:" + image_id);
// add image_id to mysql
} else {
console.log("Invalid upload signature")
}
})
Yalamber 做对了。我们的文档已过时!
因为表单使用 POST
而不是 GET
,所以在请求正文中提供 image_id 字段而不是 URL 查询参数。
您可以在我们的示例项目中看到正确的行为 photo_album, specifically in create_direct()
(下文有所删减):
function create_direct(req,res){
var photo = new Photo(req.body);
var image = new cloudinary.PreloadedFile(req.body.image_id);
if (image.is_valid()){
photo.image = image.toJSON();
}
photo.save().then(function(photo){
console.log('** photo saved');
}).catch(function(err){
console.dir(err);
}).finally(function(){
res.render('photos/create_direct',{photo:photo,upload:photo.image});
});
}
感谢您的关注!我们将很快更新我们的文档。
-- 多云
我正在使用 Node.js 和 Express。我只是实现 Cloudinary 从用户上传图像,并将图像 ID 存储到我的 MySQL 数据库中。
我尝试了 Cloudinary 文档中的教程:http://cloudinary.com/documentation/node_image_upload。一切正常,除了最后一步,我需要获取 image_id
。
var url = require('url')
var url_parts = url.parse(req.body.coverurl, true)
console.log(url_parts) //DEBUG
var query = url_parts.query
console.log(query) //DEBUG
var preloaded_file = new cloudinary.PreloadedFile(query.image_id)
if (preloaded_file.is_valid()) {
var image_id = preloaded_file.identifier()
console.log("Img ID:" + image_id)
} else {
console.log("Invalid upload signature")
}
req.body.coverurl
类似于:image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png#f63f1fe77c7f536447e079f3dd10829b5a15d862
url_parts
是:
{ protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: '#f63f1fe77c7f536447e079f3dd10829b5a15d862',
search: '',
query: {},
pathname: 'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png',
path: 'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png',
href: 'image/upload/v1426989769/f08eodnwt5zqfwb2bgpd.png#f63f1fe77c7f536447e079f3dd10829b5a15d862' }
并且...,变量 query
为空。 query.image_id
无效所以无法获取图片id,也无法验证签名。
我不知道为什么 Cloudinary 会给出这个无效的回调字符串。或者我该如何解决这个问题。
感谢您的帮助。请原谅我糟糕的英语:)
更新
我的submit_idea.hbs
<form action="/submit/idea" method="POST">
{{{imgtag}}} <!-- this will render from: cloudinary.uploader.image_upload_tag('coverurl') -->
<button type="submit">Save</button>
</form>
在我的 routes/submit.js
router.get('/submit/idea', function(req, res, next){
// just render the submit_idea.hbs with some Cloudinary variable
})
router.post('/submit/idea', function(req, res, next){
var url = require('url')
var url_parts = url.parse(req.body.coverurl, true)
var query = url_parts.query
var preloaded_file = new cloudinary.PreloadedFile(query.image_id)
if (preloaded_file.is_valid()) {
var image_id = preloaded_file.identifier()
console.log("Img ID:" + image_id)
} else {
console.log("Invalid upload signature")
}
// add image_id to mysql
})
我猜 cloudinary 站点中的文档有误或已过时。尝试如下验证您的上传。它应该工作。
router.post('/submit/idea', function(req, res, next){
/*REMOVE THESE PARTS. I guess these are not needed any more.
var url = require('url')
var url_parts = url.parse(req.body.coverurl, true)
var query = url_parts.query
*/
//Directy pass coverurl to PreloadedFile method.
var preloaded_file = new cloudinary.PreloadedFile(req.body.coverurl)
if (preloaded_file.is_valid()) {
var image_id = preloaded_file.identifier()
console.log("Img ID:" + image_id);
// add image_id to mysql
} else {
console.log("Invalid upload signature")
}
})
Yalamber 做对了。我们的文档已过时!
因为表单使用 POST
而不是 GET
,所以在请求正文中提供 image_id 字段而不是 URL 查询参数。
您可以在我们的示例项目中看到正确的行为 photo_album, specifically in create_direct()
(下文有所删减):
function create_direct(req,res){
var photo = new Photo(req.body);
var image = new cloudinary.PreloadedFile(req.body.image_id);
if (image.is_valid()){
photo.image = image.toJSON();
}
photo.save().then(function(photo){
console.log('** photo saved');
}).catch(function(err){
console.dir(err);
}).finally(function(){
res.render('photos/create_direct',{photo:photo,upload:photo.image});
});
}
感谢您的关注!我们将很快更新我们的文档。
-- 多云