Я реализую функцию загрузки для системы на основе 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-токен?