Tôi đang cố gắng viết một tập lệnh để tải xuống hình ảnh bằng cách sử dụng node.js. Đây là những gì tôi có cho đến nay:
var maxLength = 10 // 10mb
var download = function(uri, callback) {
http.request(uri)
.on('response', function(res) {
if (res.headers['content-length'] > maxLength*1024*1024) {
callback(new Error('Image too large.'))
} else if (!~[200, 304].indexOf(res.statusCode)) {
callback(new Error('Received an invalid status code.'))
} else if (!res.headers['content-type'].match(/image/)) {
callback(new Error('Not an image.'))
} else {
var body = ''
res.setEncoding('binary')
res
.on('error', function(err) {
callback(err)
})
.on('data', function(chunk) {
body += chunk
})
.on('end', function() {
// What about Windows?!
var path = '/tmp/' + Math.random().toString().split('.').pop()
fs.writeFile(path, body, 'binary', function(err) {
callback(err, path)
})
})
}
})
.on('error', function(err) {
callback(err)
})
.end();
}
Tôi, tuy nhiên, muốn làm cho điều này mạnh mẽ hơn:
- Có thư viện làm điều này và làm điều này tốt hơn?
- Có khả năng các tiêu đề phản hồi nói dối (về độ dài, về loại nội dung) không?
- Có bất kỳ mã trạng thái nào khác tôi nên quan tâm? Tôi có nên bận tâm với chuyển hướng?
- Tôi nghĩ rằng tôi đã đọc ở đâu đó rằng
binary
mã hóa sẽ bị phản đối. Tôi phải làm gì sau đó? - Làm thế nào tôi có thể làm điều này để làm việc trên windows?
- Bất kỳ cách nào khác bạn có thể làm cho kịch bản này tốt hơn?
Tại sao: đối với một tính năng tương tự như imgur nơi người dùng có thể cung cấp cho tôi URL, tôi tải xuống hình ảnh đó và chỉnh lại hình ảnh theo nhiều kích cỡ.