用Node.js发布照片给Tumblr

我试图通过Node.js Tumblr.js发布一个canvas生成的图像(如“数据:图像/ PNG; base64,iVBORw0KGgoAAAANSUh …”),但我真的很难。

我在Tumblr上注册了我的应用程序,我有我的tumblrConsumerKey,我的tumblrConsumerSecret,我设法让Oauth工作,没有问题发表文章post。 我的代码工作得很好,但是当我尝试发布图片时,一切都崩溃了。

API文档说,我可以发布数据方法,图像应该是一个数组(URL编码的二进制内容) 。 一开始我以为我的“data:image / png; base64 …”可以正常工作,但是没有。 然后,我尝试对URI进行编码,然后对其进行URI编码并进行二进制转换。 都没有工作。 然后,我发现一个人经历了专门为Tumblr 写了一个js转换器的麻烦,但它也不起作用。 而现在我真的陷入了困境,我已经有了如何转换我的形象,使其工作的ZERO想法。

这里有人能帮我解决问题吗?还是指出我的方向是正确的? 这是我的代码:

var express = require('express'); var oauth = require('oauth'); var http = require('http'); var tumblr = require('tumblr.js'); var app = express(); app.set('port', process.env.PORT || 3000); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.errorHandler()); /** * These four variables will be needed to use tumblr.js */ var tumblrConsumerKey = "mytumblrConsumerKey", tumblrConsumerSecret = "mytumblrConsumerSecret", tumblrOauthAccessToken = undefined, tumblrOauthAccessTokenSecret = undefined, // Temporary request tokens oauthRequestToken, oauthRequestTokenSecret; /** * This object will be used for OAuth **/ var consumer = new oauth.OAuth( "http://www.tumblr.com/oauth/request_token", "http://www.tumblr.com/oauth/access_token", tumblrConsumerKey, tumblrConsumerSecret, "1.0A", "http://localhost:3000/auth/callback", "HMAC-SHA1" ); app.get('/', function (req, res) { if (!tumblrOauthAccessToken || !tumblrOauthAccessTokenSecret) { res.redirect('/auth/request'); } res.send('You are logged in and ready to go'); }); app.get('/auth/request', function (req, res) { consumer.getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret){ if (error) { res.send("Error getting OAuth request token: " + error, 500); } else { oauthRequestToken = oauthToken, oauthRequestTokenSecret = oauthTokenSecret; res.redirect("http://www.tumblr.com/oauth/authorize?oauth_token=" + oauthRequestToken); } }); }); app.get('/auth/callback', function (req, res) { consumer.getOAuthAccessToken(oauthRequestToken, oauthRequestTokenSecret, req.query.oauth_verifier, function(error, _oauthAccessToken, _oauthAccessTokenSecret) { if (error) { res.send("Error getting OAuth access token: " + error, 500); } else { tumblrOauthAccessToken = _oauthAccessToken; tumblrOauthAccessTokenSecret = _oauthAccessTokenSecret; res.send("You are signed in. <a href='/test'>Post the image</a>"); } }); }); app.get('/test', function (req, res) { if (!tumblrOauthAccessToken || !tumblrOauthAccessTokenSecret) { res.redirect('/auth/request'); } var client = tumblr.createClient({ consumer_key: tumblrConsumerKey, consumer_secret: tumblrConsumerSecret, token: tumblrOauthAccessToken, token_secret: tumblrOauthAccessTokenSecret }); /** * Post your stuff here **/ var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; client.photo('myTumblrName', { source: img }, function (err, resp) { console.log(err); }); }); http.createServer(app).listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); });