Phi*_*hil 1 javascript fs node.js google-cloud-storage firebase
我需要使用URL将媒体导入Twitter。但是我无法弄清楚如何使用URL而不需要下载图像,将其临时保存在服务器上并在之后删除...
我正在使用Google Cloud存储图像,这就是为什么我不能直接访问它的原因。
那就是我想要做的:
var data = require('fs').readFileSync('https://www.example.com/image.png');
//Create the Twitter client
const client = new Twitter({
consumer_key: process.env.consumer_key_dev,
consumer_secret: process.env.consumer_secret_dev,
access_token_key: user.val().access.token,
access_token_secret: user.val().access.secret
});
// Make post request on media endpoint. Pass file data as media parameter
return client.post('media/upload', {media: data}, function(error, media, response) {
if (!error) {
// If successful, a media object will be returned.
console.log(media);
// Lets tweet it
var status = {
status: sendTweet,
media_ids: media.media_id_string // Pass the media id string
}
return client.post('statuses/update', status, function(error, tweet, response) {
if (!error) {
console.log(tweet);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
但是我得到这个错误:
ERROR: { Error: ENOENT: no such file or directory, open 'https://storage.googleapis.com/...
Run Code Online (Sandbox Code Playgroud)
关于我应该怎么做的任何想法?
您遇到的问题是,尝试使用“文件系统(fs)”模块访问文件系统中以外的位置。
您可以使用“ http ”或“ https ”模块解决获取图像的问题。用法示例如下:
const https = require('https');
function getImage(url, callback) {
https.get(url, res => {
// Initialise an array
const bufs = [];
// Add the data to the buffer collection
res.on('data', function (chunk) {
bufs.push(chunk)
});
// This signifies the end of a request
res.on('end', function () {
// We can join all of the 'chunks' of the image together
const data = Buffer.concat(bufs);
// Then we can call our callback.
callback(null, data);
});
})
// Inform the callback of the error.
.on('error', callback);
}
// Then you 'get' your image like so:
getImage('https://www.example.com/image.png', function (err, data) {
// Handle the error if there was an error getting the image.
if (err) {
throw new Error(err);
}
// Now you can use the rest of your code here:
const client = new Twitter({ ... });
// etc.
// I've removed the rest because of size.
return client.post(
'media/upload',
{media: data},
function(error, media, response) {
// ...
}
);
})
Run Code Online (Sandbox Code Playgroud)
您不能同步执行http请求,我强烈建议您避免由于阻塞(https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/)而避免同步请求。
| 归档时间: |
|
| 查看次数: |
3726 次 |
| 最近记录: |