2011-08-15 39 views
18

Tôi đang cố mã hóa hình ảnh bằng base64 trong Node.JS để chuyển đến API PostageApp dưới dạng tệp đính kèm. Tôi nghĩ rằng tôi đã có nó làm việc nhưng nó đính kèm một tập tin 1K đó không phải là chính xác những gì tôi đang tìm kiếm.Node.JS - Mã hóa hình ảnh trong base64 bằng cách sử dụng bộ đệm

Dưới đây là mã của tôi:

var base64data; 

fs.readFile(attachment, function(err, data) { 
    base64data = new Buffer(data).toString('base64'); 
}); 

Và đây là một phần của cuộc gọi API tôi đang làm:

attachments: { 
    "attachment.txt" : { 
    content_type: "application/octet-stream", 
    content: base64data 
    }, 
} 

tôi hơi bị mất, không được tuyệt vời như vậy với Node, nhưng tôi nghĩ rằng nó sẽ hoạt động. Bất kỳ trợ giúp sẽ được đánh giá cao!

+0

@Jim Schubert, lời khuyên đó sai và xấu. Đầu tiên, readFile đọc toàn bộ tập tin, không phải khối. Thứ hai, chặn mã sẽ chặn toàn bộ máy chủ, ý tưởng ngu ngốc. – thejh

Trả lời

36
fs.readFile(attachment, function(err, data) { 
    var base64data = new Buffer(data).toString('base64'); 
    [your API call here] 
}); 

Phải mất một khoảng thời gian cho đến khi có kết quả, do đó, thời gian thực hiện phạm vi đã kết thúc.

+0

Thật không may, tôi chuyển 'base64data' vào một tải trọng, về cơ bản là một băm JSON, mà sau đó tôi POST tới máy chủ API. Điều này có thích hợp hơn với những gì tôi đang làm không? – JonLim

+0

@JonLim, đây là cách duy nhất để làm điều đó. Bạn sẽ phải làm tất cả những thứ đó ("chuyển base64data vào một tải trọng, về cơ bản là một băm JSON, mà sau đó tôi POST tới máy chủ API") bên trong gọi lại. – thejh

+0

Ah. Không có cách nào khác xung quanh nó? Điều đó hút, khiến tham số đính kèm là tùy chọn, vì vậy nếu không có tệp đính kèm, nó sẽ không được bao gồm. Cảm ơn mặc dù! – JonLim

9

Chỉ định "base64" làm mã hóa. Per the docs:

Nếu không có mã hóa được chỉ định thì bộ đệm thô được trả về.

fs.readFile(attachment, {encoding: 'base64'}, function(err, base64data) { 
    [your API call here] 
}); 
+0

Không mã hóa cho readFile mã hóa của tập tin đính kèm và không phải là những gì bạn muốn mã hóa? – Sam

+1

trong tài liệu, 'Mã hóa có thể là một trong những mã được chấp nhận bởi Buffer.' mặc dù nó là' createReadStream'. Tôi đã thử những gì @hyphenthis nói và nó hoạt động. – Kennyhyun

Các vấn đề liên quan