Я намагаюся написати сценарій для завантаження зображень за допомогою node.js. Ось що я маю досі:
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();
}
Я, однак, хочу зробити це більш надійним:
- Чи є бібліотеки, які роблять це, і роблять це краще?
- Чи є шанс, що заголовки відповідей лежать (про довжину, про тип вмісту)?
- Чи є якісь інші статусні коди, про які я повинен дбати? Чи варто турбуватися про переадресації?
- Думаю, я десь прочитав, що
binary
кодування буде застарілим. Що я роблю тоді? - Як я можу змусити це працювати на windows?
- Будь-якими іншими способами можна зробити цей сценарій кращим?
Чому: для функції, подібної до imgur, коли користувачі можуть надати мені URL-адресу, я завантажую це зображення і повторно готую зображення в декількох розмірах.