【问题标题】:How to handle an image file from googleusercontent CDN in Node?如何在 Node 中处理来自 googleusercontent CDN 的图像文件?
【发布时间】:2017-03-14 02:21:43
【问题描述】:

尝试从 Google CDN 请求图像并将其上传到 S3。 使用https://github.com/request/request 库和Node / Express

有点困惑如何处理从 Google CDN 返回的有效负载。

图像返回正文字段并进行编码。不知道它是如何编码的。

给定一个 Google CDN 的 URL:

const fileURL = https://lh4.googleusercontent.com/EWE1234rFL006WfQKuAVrsYMOiKnM6iztPtLgXM5U…3i26LoPHQwPTQME7ne3XoMriKVjUo3hrhwWw1211223

  request(fileURL, (err, res, body) => {

     //NOT sure how to handle the response here??
     //Trying base64
     fs.writeFileSync(`.tmp/file1.png`, body, {encoding: 'base64'});

     //Trying Binary
     fs.writeFileSync(`.tmp/file.png`, body, {encoding: 'binary'});
  }

body 返回为:

�PNG↵↵IHDRv&vл� IDATx�}���<z�f���];��o]��A�N�.po�/�/R���..............

1)。向googleusercontentGoogle CDN 请求图片(图片最初粘贴在 Google Doc 中)

2)。创建映像文件并写入服务器上的磁盘。

fs.writeFileSync 似乎都没有生成可读的图像文件。

任何有关处理此问题的建议都会很棒..

【问题讨论】:

  • 你用什么上传到S3?您很可能可以按原样通过身体。
  • 对不起,我要强调的问题是正在写入的图像不可读。要去编辑我的帖子。试图了解如何处理从 Google 返回的字符串并从中创建一个文件。

标签: node.js express amazon-s3 node-request google-cdn


【解决方案1】:

将响应作为正文传递给您的 S3 上传。

var request = require('request'),
    fs = require('fs'),
    aws = require('aws-sdk'),
    s3 = new aws.S3(),
    url = 'https://lh4.googleusercontent.com/-2XOcvsAH-kc/VHvmCm1aOoI/AAAAAAABtzg/SDdN1Vg5FFs/s346/14%2B-%2B1';

# Store in a file
request(url).pipe(fs.createWriteStream('file.gif'));

request(url, {encoding: 'binary'}, function(error, response, body) {
    # Another way to store in a file
    fs.writeFile('file.gif', body, 'binary', function(err) {});

    # Upload to S3
    s3.upload({
        Body: body,
        Bucket: 'BucketName',
        Key: 'file.gif',
    }, function(err, data) {});
});

【讨论】:

  • 是的,这基本上就是我正在做的事情。写入磁盘的文件不可读。
  • 注意请求调用中的编码部分request(url, {encoding: 'binary'}
猜你喜欢
  • 2019-05-22
  • 2021-03-11
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多