каким способом лучше поместить файл на amazon s3 с сервера?

Я хочу предоставить API службы отдыха с помощью restify (или экспресс)

  • Обязанностью службы является позволить клиенту, который может поместить аудио/мпег или другой
    бинарный файл на наш сервер, а затем проверить аутентификацию, если
    пройдет, поместить файл на amazon s3, а затем проверить клиент s3< br> response statusCode, если s3 client response statusCode == 200 , сделайте
    что-нибудь

решение 1: использование канала потока запросов для отправки файлов на amazon с помощью knox

var stream = s3.put(filepath, {options});
serverReq.pipe(stream);
stream.on('response', function(err, s3Res) {
    if (err) { console.log(err); }
    if (s3Res.statusCode == 200) { store file infos on DB}
}

решение 2: использование formdiable и fs для предварительного сохранения файла в локальной временной папке сервера, а затем размещение файлов на amazon с помощью knox

(after pre store file on server local temp folder)
s3.putFile(sourcePath, destPath, {options}, function(err, _res) {
    (clear local files from local temp folder)

    if (err) { return next(err); }
    if (_res.statusCode == 200) {console.log('save on %s', s3.url(dest))}
    res.send(_res.statusCode);
    return next();
});

Какой способ лучше между решением 1 и решением 2 или другим лучшим способом ?? и есть ли здесь какие-либо проблемы с производительностью, о которых нужно знать?


person PatrickSCLin    schedule 16.11.2012    source источник


Ответы (1)


В зависимости от нагрузки на сервер и доступной пропускной способности ваш diskio является вашим самым большим потенциальным узким местом. Я бы сказал, что используйте решение 1, которое передает файл напрямую и не сохраняет его на физическом носителе. Убедитесь, что вы не пытаетесь сохранить весь объект в памяти, иначе вы можете столкнуться с проблемой системных ресурсов.

person jeremy    schedule 16.11.2012
comment
Есть ли какие-либо методы ограничения размера входящего буфера? - person PatrickSCLin; 16.11.2012
comment
Вы можете управлять размерами буферов и пропускной способностью, используя response.pause() и response.resume(). Это приведет к надлежащему отключению алгоритмов TCP. (см. http://nodejs.org/api/http.html#http_response_pause) - person jeremy; 16.11.2012