【问题标题】:Get image byte/base64 from URL从 URL 获取图像字节/base64
【发布时间】:2025-12-13 09:30:01
【问题描述】:

我正在寻找一种解决方案,我可以在其中提供特定图像的 URL,然后使用 Javascript 检索该图像的数据。我已经发现我不能只拉文件,所以也许字节数组或base64可以吗?

在有人否决该问题之前具体说明:我想解析 URL 并以任何形式将图像发送到我的服务器。有很多类似的问题,但没有一个能回答这个问题。

我需要那个做什么?我可以访问 API,其中还提供了图像 url,但我希望它们通过 Parse.com 服务中的Background Job 上传到我的服务器(类似于 CRON 作业)。我知道如何将文件与ParseObject 链接,但找不到如何将图像直接下载到ParseCloud 并链接它的解决方案。

var Image = require("parse-image");
Parse.Cloud.job("getImagesJob", function(request, status) {
  Parse.Cloud.useMasterKey();
  var beerObj = Parse.Object.extend("My_class");
  var query = new Parse.Query(beerObj);
  query.first().then(function(objs) {
  var brew = objs.get("brewery");
  var bname = objs.get("beer_name");
  //var fullName = brew + " " + bname;
  var fullName = "Browar Name";
  console.log(fullName);

    return Parse.Cloud.httpRequest({
      method: 'GET',
      url: 'api server address',
      headers: {
        'Content-Type': 'application/json;charset=utf-8'
    },
      params: {
        q : fullName,
        client_id : '...',
        client_secret : '...'
    }
    }).then(function(httpResponse) {
        var json = JSON.parse(httpResponse.text);
        if(json.meta.code === 200){
            if(json.response.beers.count > 0){

                if(json.response.beers.items[0].beer.beer_label === "/default.png"){
                    console.log("brak etykiety dla " + fullName);

                } else {
                    console.log("znaleziono etykietę dla " + fullName);
                    Parse.Cloud.httpRequest({ //NOT REACHING
                      url: json.response.beers.items[0].beer.beer_label,
                      success: function(response) {
                        // The file contents are in response.buffer.
                        var image = new Image();
                        return image.setData(response.buffer, {
                          success: function() {
                              objs.set("logo", image.data());
                            console.log("udalo sie dolaczyc");
                          },
                          error: function(error) {
                            // The image data was invalid.
                            console.error(error);
                          }
                        })
                      },
                      error: function(error) {
                        // The networking request failed.
                      }
                    });

                }

            } else {
                // daj cokolwiek żeby się nie zacięło na jednym

                console.log("Brak danych dla piwa: " + fullName);
            }       
        }

    }, function(httpResponse) {
      console.error('Request failed with response code ' + httpResponse.status + httpResponse.text);
    });

}).then(function(obj) {
  status.success("Zrobione");
}, function(error) {
  status.error(error);
});
});

【问题讨论】:

  • console.log("znaleziono etykietę dla" + fullName);
  • @Ralphilius 是的,我已经弄清楚这一切是如何运作的。我必须将httpRequest 放入新的then() 承诺中。我花了一段时间,但现在工作正常。感谢该模块 sn-p!

标签: javascript parse-platform base64 bytearray


【解决方案1】:

您可以在 Cloud Code 中使用 parse-image 模块,就像在他们的 documentation 中一样

var Image = require("parse-image");

Parse.Cloud.httpRequest({
  url: YOUR_URL,
  success: function(response) {
    // The file contents are in response.buffer.
    var image = new Image();
    return image.setData(response.buffer, {
      success: function() {
        console.log("Image is " + image.width() + "x" + image.height() + ".");
      },
      error: function(error) {
        // The image data was invalid.
      }
    })
  },
  error: function(error) {
    // The networking request failed.
  }
});

通过以上代码,您可以使用image.data() 获取Buffer 中的图像数据。要获取base64数据,请使用image.data().toString("base64")

【讨论】:

  • 哇,以前没发现过!这适用于外部图像来源吗?即“server.com/someimage.jpg”,它会得到它吗?
  • 是的。如果解决了您的问题,请标记为答案。
  • 请检查我编辑的问题 - 我的代码无法到达 Parse.Cloud.httpRequest。其他一切正常(日志和一切)。
最近更新 更多