Я хочу загрузить файлы в свое хранилище BLOB-объектов Azure через NodeJS. До сих пор я загружал файлы на свой сервер через express-fileupload, они хранятся на его диске, а затем выгружаются в хранилище BLOB-объектов Azure. Теперь я хочу выгружать файлы в Azure во время их загрузки, то есть не сохранять их на диске сервера перед их загрузкой в ​​Azure. Это метод, который я использую до сих пор:

router.post('/upload', function(req, res) {
    "use strict"
    if (!req.files)
        return res.status(400).send('No files were uploaded.');

    // The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
    let context = req.files.context;
let filenameContext = req.files.context.name;

    context.mv('../'+filenameContext, function(err) {
    if (err)
        return res.status(500).send(err);
    else {
        blobSvc.createBlockBlobFromStream(containerName, filenameContext, context, function(error, result, response){
            if(!error){
                console.log(filenameContext+" stored in blob");
                fs.unlink('../'+filenameContext, function() {
                    if (err) throw err;
                });
            } else {
                console.error(filenameContext+" storing in blob failed");
            }
        });
    }
});

Есть ли способ превратить загруженный файл непосредственно в поток для использования метода createBlockBlobFromStream без предварительного сохранения файла на диске сервера?

1
Noltibus 26 Ноя 2017 в 18:07

1 ответ

Лучший ответ

Я бы рекомендовал вместо этого использовать createBlockBlobFromText:

app.post('/upload', function(req, res) {
    if (!req.files)
        return res.status(400).send('No files were uploaded.'); 

    let data = req.files.context.data;
    let filename = req.files.context.name;    

    blobSvc.createBlockBlobFromText(containerName, filename, data, function(err) {
        if (err)
            return res.status(500).send(err);

        res.send('File uploaded!');
    })
})
3
Aaron Chen 27 Ноя 2017 в 06:18