首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Node中的图像url上传图像到?

如何从Node中的图像url上传图像到?
EN

Stack Overflow用户
提问于 2016-04-16 08:12:45
回答 6查看 16.1K关注 0票数 12

给定一个图像url,我如何将该图像上传到,以便使用Node.js进行图像处理?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-04-16 08:43:47

这是两个步骤的过程:

  • 使用请求获取在本地下载文件。
  • 上传到GCL与官方的图书馆。 var fs =需要量(‘fs’);var gcloud =需要量(‘gcloud’);//基于每个API的身份验证。如果在//全局基础上使用,则不需要这样做(请参阅上面的身份验证部分)。var gcs = gcloud.storage({ projectId:‘my’,keyFilename:'/path/to/keyfile.json‘});//创建一个新桶。成功地创建了gcs.createBucket(‘my-new’,函数(err,bucket) { if (!err) { //“gcs.createBucket”)。( });//引用现有的桶。var localReadStream =localReadStream=fs.createReadStream(‘/照片/动物园/zebra.jpg’);var remoteWriteStream = bucket.file('zebra.jpg').createWriteStream();localReadStream.pipe(remoteWriteStream) .on('error',function(err) {}) .on('finish',function() { //文件上传完成。});

如果要将文件保存为jpeg映像,则需要编辑remoteWriteStream流并添加自定义元数据:

代码语言:javascript
运行
复制
var image = bucket.file('zebra.jpg');
localReadStream.pipe(image.createWriteStream({
    metadata: {
      contentType: 'image/jpeg',
      metadata: {
        custom: 'metadata'
      }
    }
}))

我在挖掘这个文档的时候发现了这个

票数 19
EN

Stack Overflow用户

发布于 2017-06-16 07:23:05

为了添加到Yevgen Safronov的答案中,我们可以将请求传输到写流中,而无需显式地将图像下载到本地文件系统中。

代码语言:javascript
运行
复制
const request = require('request');
const storage = require('@google-cloud/storage')();

function saveToStorage(attachmentUrl, bucketName, objectName) {
  const req = request(attachmentUrl);
  req.pause();
  req.on('response', res => {

    // Don't set up the pipe to the write stream unless the status is ok.
    // See https://stackoverflow.com/a/26163128/2669960 for details.
    if (res.statusCode !== 200) {
      return;
    }

    const writeStream = storage.bucket(bucketName).file(objectName)
      .createWriteStream({

        // Tweak the config options as desired.
        gzip: true,
        public: true,
        metadata: {
          contentType: res.headers['content-type']
        }
      });
    req.pipe(writeStream)
      .on('finish', () => console.log('saved'))
      .on('error', err => {
        writeStream.end();
        console.error(err);
      });

    // Resume only when the pipe is set up.
    req.resume();
  });
  req.on('error', err => console.error(err));
}
票数 13
EN

Stack Overflow用户

发布于 2016-11-30 20:57:15

在处理从远程网址上传的图像的情况下。参考Google文档提供的最新库。而不是存储图像的缓冲区。我们可以直接把它送到储藏室。

代码语言:javascript
运行
复制
function sendUploadUrlToGCS(req, res, next) {
  if (!req.body.url) {
    return next();
  }

  var gcsname = Date.now() + '_name.jpg';
  var file = bucket.file(gcsname);

  return request({url: <remote-image-url>, encoding: null}, function(err, response, buffer) {
    req.file = {};
    var stream = file.createWriteStream({
      metadata: {
        contentType: response.headers['content-type']
      }
    });

    stream.on('error', function(err) {
       req.file.cloudStorageError = err;
       console.log(err);
       next(err);
    });

    stream.on('finish', function() {
      req.file.cloudStorageObject = gcsname;
      req.file.cloudStoragePublicUrl = getPublicUrl(gcsname);
      next();
    });

    stream.end(buffer);
  });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36661795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档