簡體   English   中英

從URL獲取圖像作為緩沖區

[英]Get image as buffer from URL

我花了幾個小時試圖將圖像數據作為緩沖區,搜索結果導致我使用“請求”模塊,其他建議導致在更高版本的節點中使用其他模塊,我無法使用因為我們依賴於節點v 6.11至今。

以下是我的試驗:

request(imageURL).pipe(fs.createWriteStream('downloaded-img-
1.jpg')).on('close', function () {
        console.log('ok');
});

request(imageURL, function (err, message, response) {
fs.writeFile('downloaded-img-2.jpg', response, 'binary', function (err) {
    console.log('File saved.');
});

fs.writeFile('downloaded-img-3.jpg', chunks, 'binary', function (err) {
        console.log('File saved.');
})

resolve(response);
})
.on('data', function (chunk) {
    chunks.push(chunk);
})
.on('response', function (response) {

});
});

“下載的img-1.jpg”被正確下載,但我必須避免將文件保存在磁盤上,然后將其作為流讀取,這是一個PRD環境約束。 因此,下一個選項是使用圖像數據,如“downloaded-img-2.jpg”和“downloaded-img-3.jpg”所示,等待“響應”或手工制作的“塊”,問題是這兩個圖像總是被破壞了,我不知道為什么?

所有這一切背后的重點是什么? 我試圖在URL文件中添加URL后面的圖像,我使用的zip庫(js-zip)接受緩沖區作為輸入。 任何想法為什么我沒有正確地得到“塊”或“響應”?

我已經在節點6.9.2中測試了下面的代碼,它將下載一個圖像作為緩沖區。 我還將緩沖區寫入文件(只是為了測試一切正常!),body對象是一個包含圖像數據的緩沖區:

"use strict";

var request = require('request');
var fs = require('fs');

var options = {
    url: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Hubble2005-01-barred-spiral-galaxy-NGC1300.jpg/1920px-Hubble2005-01-barred-spiral-galaxy-NGC1300.jpg",
    method: "get",
    encoding: null
};

console.log('Requesting image..');
request(options, function (error, response, body) {

    if (error) {
        console.error('error:', error);
    } else {
        console.log('Response: StatusCode:', response && response.statusCode);
        console.log('Response: Body: Length: %d. Is buffer: %s', body.length, (body instanceof Buffer));
        fs.writeFileSync('test.jpg', body);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM