Загрузка файла в стороннюю архитектуру - PullRequest
1 голос
/ 18 апреля 2020

Я реализую функцию загрузки для системы на основе Node.js. Я хочу хранить загруженные файлы в стороннем облачном хранилище, например, AWS, Dropbox и др. c.

. Для загрузки данных мне нужно предоставить API-токен хранения, но на в то же время я не хочу показывать это на стороне клиента. В качестве обходного пути я сначала загружаю файл на свой сервер, а затем пересылаю его в облачное хранилище.

На стороне клиента:

function sendFile(formData, callback) {
    let ip = location.host;
    $.ajax({
        processData: false,
        contentType: false,
        type: "POST",
        url: http() + ip + "/documentFileUpload",
        data: formData,
        success: callback,
        error: function (err) {
            return false;
        }
    });
}

На стороне сервера:

app.post("/documentFileUpload", function (req, res) {
    const storage = multer.diskStorage({
        destination: function (req, file, callback) {
            callback(null, "./../uploads/");
        },
        filename: function (req, file, callback) {
            callback(null, file.fieldname + '-' + Date.now());
        }
    });
    const upload = multer({ storage : storage}).single('file');
    upload(req, res, function(err) {
            res.setHeader("Content-Type", "application/json");
            if(err) {
                res.send(JSON.stringify({
                    "result": false,
                    "message": "Cant save the local file: " + err.message
                }));
            } else {
                // pseudo-code starts here
                upladToExternalService(req.file.path, SECRET_KEY, function(err) {
                    if (err) {
                        res.send(JSON.stringify({
                            "result": false,
                            "message": "Cant forward the file: " + err.message
                        }));
                    } else {
                        deleteLocalFile(req.file.path, function (err) {
                            if (err) {
                                res.send(JSON.stringify({
                                    "result": false,
                                    "message": "Cant delete the local file: " + err.message
                                }));
                            } else {
                                res.send(JSON.stringify({
                                    "result": true,
                                    "message": "The file has been saved successfully"
                                }));
                            }
                        });
                    }
                });
            }
        });
});

Вопрос:
Как реализовать функцию загрузки файлов непосредственно в облачное хранилище, не раскрывая его API-токен?

...