|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- const express = require('express');
- const router = express.Router();
- const multer = require('multer');
- const OSS = require('ali-oss');
- const config = require('../config/oss');
- const path = require('path');
- const fs = require('fs');
-
- // 确保上传目录存在
- const uploadsDir = path.join(__dirname, '../uploads');
- if (!fs.existsSync(uploadsDir)) {
- fs.mkdirSync(uploadsDir, { recursive: true });
- }
-
- const upload = multer({
- storage: multer.memoryStorage(),
- limits: {
- fileSize: 5 * 1024 * 1024 // 限制5MB
- }
- }).array('images');
-
- router.post('/upload-images', (req, res) => {
- upload(req, res, async function(err) {
- if (err instanceof multer.MulterError) {
- console.error('Multer error:', err);
- return res.status(400).json({ error: '文件上传错误: ' + err.message });
- } else if (err) {
- console.error('Unknown error:', err);
- return res.status(500).json({ error: '未知错误: ' + err.message });
- }
-
- try {
- if (!req.files || req.files.length === 0) {
- return res.status(400).json({ error: '没有上传文件' });
- }
-
- // 验证OSS配置
- if (!config.accessKeyId || !config.accessKeySecret || !config.bucket || !config.endpoint) {
- console.error('OSS configuration missing:', config);
- return res.status(500).json({ error: 'OSS配置错误' });
- }
-
- const client = new OSS({
- accessKeyId: config.accessKeyId,
- accessKeySecret: config.accessKeySecret,
- bucket: config.bucket,
- endpoint: config.endpoint,
- secure: true
- });
-
- const uploadPromises = req.files.map(async file => {
- try {
- const fileExt = file.originalname.split('.').pop().toLowerCase();
-
- // 验证文件类型
- const allowedTypes = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
- if (!allowedTypes.includes(fileExt)) {
- throw new Error(`不支持的文件类型: ${fileExt}`);
- }
-
- const uniqueId = Math.random().toString(36).substring(2) + Date.now();
- const fileName = `ueditor/${uniqueId}.${fileExt}`;
-
- console.log('Uploading file to OSS:', fileName);
- const result = await client.put(fileName, file.buffer);
- console.log('Upload result:', result);
-
- return {
- url: `https://${config.bucket}.${config.endpoint}/${fileName}`,
- name: fileName.split('/').pop()
- };
- } catch (error) {
- console.error('Individual file upload error:', error);
- throw new Error(`文件 ${file.originalname} 上传失败: ${error.message}`);
- }
- });
-
- console.log('Processing all uploads...');
- const results = await Promise.all(uploadPromises);
- console.log('Upload results:', results);
-
- res.json(results);
-
- } catch (error) {
- console.error('Upload error:', error);
- res.status(500).json({
- error: error.message || '上传失败',
- details: error.stack
- });
- }
- });
- });
-
- module.exports = router;
|