Сервер для загрузки файлов
Это приложение на NodeJS позволяет загружать файлы в S3.
Как работает приложение
Сервер принимает файлы по пути /upload, создает FormData с полученным файлом с помощью библиотеки multer и загружает файл в Default Uploader, так же в ответ сервер отдает информацию по загруженным файлам от Default Uploader.
Это классический пример для сценария, когда вашим пользователям нужно загрузить фото, видео или документ.
Реализация сервера
Создайте приложение
mkdir myuploaderserver && cd myuploaderserver && npm init -y
Создайте index.js файл, у вас должны быть такая файловая структура.
Директорияmyuploaderserver/
- package.json
- index.js
Скопируйте код ниже в index.js
const axios = require('axios');const express = require('express');const multer = require('multer');const FormData = require('form-data');
const app = express();const port = 3000;
const url = 'https://api.defaultuploader.com/v1/upload';const token = 'YOUR_SECRET_CLIENT_TOKEN'; // Заменить на ваш токен!
const storage = multer.memoryStorage();const upload = multer({ storage });
app.post('/upload', upload.any('file'), async (req, res) => { try { const form = new FormData(); for (const file of req.files) { form.append('file', file.buffer, { filename: file.originalname, }); }
const response = await axios.post(url, form, { headers: { ...form.getHeaders(), Authorization: `${token}`, }, });
console.log('File uploaded successfully!'); console.log('Response:', response.data);
res.status(200).json({ data: response.data }); } catch (error) { console.error('Error uploading file:', error.message); res.status(500).json({ error: 'File upload failed' }); }});
app.listen(port, () => { console.log(`Server is running on port ${port}`);});
Установите зависимости
npm i axios express multer form-data
Запустите сервер
node index.js
Тестирование
С помощью Postman отправьте запрос multipart/form-data на http://localhost:3000/uplad
с прикрепленным файлом.
Не забудьте в коде вставить ваш SECRET_CLIENT_TOKEN
.
Или с CURL
curl --location 'http://localhost:3000/upload' --header 'Content-Type: image/svg+xml' --header 'Authorization: SECRET_CLIENT_TOKEN' --form 'image=@"/C:/Users/user/Desktop/image.jpg"'