【发布时间】:2015-05-25 06:30:33
【问题描述】:
我正在使用 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>
在我的路由/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
})
【问题讨论】:
-
你为什么使用 req.body.coverurl 而不是 req.url?
-
我已经更新了这个问题。我认为 req.url 只是得到类似
/submit/idea;不是上传图片的标识符。 -
我猜你要找的是public_id。这在您的示例 f08eodnwt5zqfwb2bgpd 中。我想你可以从 url_parts 中的路径中提取它,然后尝试验证它。
标签: javascript node.js express image-uploading cloudinary