Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // server.js
- const express = require('express');
- const AWS = require('aws-sdk');
- const cors = require('cors');
- const path = require('path');
- const app = express();
- const PORT = 3000;
- app.use(cors());
- app.use(express.json());
- app.use(express.static(__dirname));
- const s3 = new AWS.S3({
- endpoint: 'https://storage.yandexcloud.net',
- accessKeyId: 'YCAJEHtdePFC8MCfONmONK5Tz',
- secretAccessKey: 'YCML7eke-Wy3YoXG9gHWbRRbQjq5fNq3ZE38EXMG',
- region: 'ru-central1',
- signatureVersion: 'v4'
- });
- const BUCKET_NAME = 'test-bucket-supa-unique';
- app.post('/upload', (req, res) => {
- const { fileName } = req.body;
- if (!fileName) {
- return res.status(400).json({ error: 'fileName is required' });
- }
- const cleanFileName = fileName.replace(/[^a-zA-Z0-9._-]/g, '_');
- const params = {
- Bucket: BUCKET_NAME,
- Key: cleanFileName,
- Expires: 120,
- ContentType: 'application/octet-stream',
- };
- try {
- const uploadUrl = s3.getSignedUrl('putObject', params);
- console.log(`Сгенерирован URL для загрузки: ${cleanFileName}`);
- res.json({
- success: true,
- uploadUrl: uploadUrl,
- fileName: cleanFileName,
- expiresIn: '2 minutes'
- });
- } catch (error) {
- console.error('Error generating upload URL:', error);
- res.status(500).json({
- error: 'Failed to generate upload URL',
- details: error.message
- });
- }
- });
- app.get('/download/:fileName', (req, res) => {
- const { fileName } = req.params;
- const params = {
- Bucket: BUCKET_NAME,
- Key: fileName,
- Expires: 60
- };
- try {
- const downloadUrl = s3.getSignedUrl('getObject', params);
- console.log(`Сгенерирован URL для скачивания: ${fileName}`);
- res.redirect(303, downloadUrl);
- } catch (error) {
- console.error('Error generating download URL:', error);
- res.status(500).json({ error: 'Failed to generate download URL' });
- }
- });
- app.get('/list', async (req, res) => {
- try {
- const response = await s3.listObjectsV2({ Bucket: BUCKET_NAME }).promise();
- const files = response.Contents.map(item => ({
- name: item.Key,
- size: item.Size,
- lastModified: item.LastModified
- }));
- console.log(`Список файлов: ${files.length} файлов`);
- res.json({ files });
- } catch (error) {
- console.error('Error listing files:', error);
- res.status(500).json({
- error: 'Failed to list files',
- details: error.message
- });
- }
- });
- app.get('/health', async (req, res) => {
- try {
- await s3.headBucket({ Bucket: BUCKET_NAME }).promise();
- res.json({ status: 'OK', bucket: BUCKET_NAME });
- } catch (error) {
- res.status(500).json({ status: 'ERROR', error: error.message });
- }
- });
- app.get('/', (req, res) => {
- res.sendFile(path.join(__dirname, 'index.html'));
- });
- app.listen(PORT, () => {
- console.log(`
- Откройте: http://localhost:${PORT}
- `);
- });
Advertisement
Add Comment
Please, Sign In to add comment