Используя Express с Node, я могу загрузить файл успешно и передать его в хранилище Azure в следующем блоке кода.
app.get('/upload', function (req, res) {
res.send(
'<form action="/upload" method="post" enctype="multipart/form-data">' +
'<input type="file" name="snapshot" />' +
'<input type="submit" value="Upload" />' +
'</form>'
);
});
app.post('/upload', function (req, res) {
var path = req.files.snapshot.path;
var bs= azure.createBlobService();
bs.createBlockBlobFromFile('c', 'test.png', path, function (error) { });
res.send("OK");
});
Это работает отлично, но Express создает временный файл и сначала сохраняет изображение, затем я загружаю его в Azure из файла. Это кажется неэффективным и ненужным шагом в этом процессе, и мне приходится управлять очисткой каталога временного файла.
Я должен иметь возможность передавать файл непосредственно в хранилище Azure с помощью метода blobService.createBlockBlobFromStream
в Azure SDK, но я недостаточно хорошо знаком с Node или Express, чтобы понять, как получить доступ к данным потока.
app.post('/upload', function (req, res) {
var stream = /// WHAT GOES HERE ?? ///
var bs= azure.createBlobService();
bs.createBlockBlobFromStream('c', 'test.png', stream, function (error) { });
res.send("OK");
});
Я нашел следующий блог, который указывает, что может быть способ сделать это, и, конечно, Express захватывает данные потока и анализирует и сохраняет его в файловой системе. http://blog.valeryjacobs.com/index.php/streaming-media-from-url-to-blob-storage/
Код vjacobs фактически загружает файл с другого сайта и передает этот поток Azure, поэтому я не уверен, что он может быть адаптирован для работы в моей ситуации.
Как я могу получить доступ и передать поток загруженных файлов непосредственно на Azure с помощью Node?