2013-02-05 3 views
1
http.get('http://path/to/image.jpg', function (res) { 
    var img = ''; 
    res.on('data', function (buff) { 
    img += buff; 
    }); 
    res.on('end', function() { 
    var data = querystring.stringify({ 
     image: img.toString('base64'), 
     type: 'base64' 
    }); 
    var opts = { 
     host: 'api.imgur.com', 
     path: '/3/image', 
     method: 'POST', 
     headers: { 
     'Authorization': 'Client-ID myId', 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': data.length 
     } 
    }; 
    var req = https.request(opts, function (res) { 
     res.on('data', function (buff) { 
     console.log(buff.toString()); 
     }); 
    }); 
    req.end(data); 
    }); 
}); 

img은 URL에서 다운로드 한 문자열입니다.Imgur에 base64 이미지 게시

querystring.js:114 
    return encodeURIComponent(str); 
     ^
URIError: URI malformed 

가 어떻게 제대로 Imgur에 포스트 데이터를 제출하나요 : 내가지고있어 그것을 실행하면? 귀하의 img 이진 데이터의 문자열이 될 것이며, 올바르게 base64 인코딩되지 않습니다 :

+0

: 또 다른 해결책은 이미지를 다운로드 할 때, 대신 문자열을 연결의 대신 배열에있는 모든 청크를 수집하고 Buffer.concat와 그에서 버퍼를 확인하는 것입니다 'img'을 읽는 방법입니다. 어떤 종류의 객체가'img'입니까? 코드를 게시하십시오. –

+0

@LinusGThiel 안녕하세요, 저는 방금 어떻게 img를 얻는 지 보여주는 글을 업데이트했습니다. – Zhianc

답변

1

가 여기에 일이보십시오. switewvu24에서 언급 하듯이, base64 인코딩 할 때 버퍼가 필요합니다. 불행하게도, 그 해결책은 정확하지 않습니다.

당신이 이미 가지고있는 것을에서 적어도 변화는 새로운 버퍼 같이 할 것 :

var data = querystring.stringify({ 
    image: new Buffer(img, 'binary').toString('base64') 
}); 

참고 올바른 데이터 변환을 얻을 수 있도록합니다 'binary'. 나는이 문제 확신

http.get('http://path/to/image.jpg', function (res) { 
    var imgData = []; 
    res.on('data', function (buff) { 
    imgData.push(buff); 
    }); 
    res.on('end', function() { 
    var img = Buffer.concat(imgData); 
    var data = querystring.stringify({ 
     image: img.toString('base64'), 
     type: 'base64' 
    }); 
    // ... 
0

 
var data = querystring.stringify({ 
    image: new Buffer(img).toString('base64') 
}); 
+0

안녕하세요, 그게 내가 현재하고있는 일입니다. 방금 내 게시물을 업데이트했습니다. 감사! – Zhianc