var mysql = require('mysql'); var express = require('express'); var cors = require('cors'); var app = express(); var bodyParser = require('body-parser'); const crypto = require('crypto'); const fs = require('fs'); const path = require('path'); const fileUpload = require('express-fileupload'); const session = require('express-session'); const multer = require('multer'); var connection = mysql.createConnection({ host : 'localhost', port : '13307', user : 'root', password : '123456', database : 'mailbox' }); app.use(cors()) //上传并识别功能 const upload = multer({ dest: 'uploads/' }); // 上传文件的临时存储目录 // Multer是一个Node.js中间件,用于处理multipart/form-data类型的表单数据 app.post('/api/upload', upload.single('image'), function(req, res) {// 单文件上传 if (!req.file) { return res.status(400).send('No file uploaded.'); } const file = req.file; const tempFilePath = file.path; const fileHash = req.query.fileHash; console.log(fileHash, 'fileHash') const hash = crypto.createHash('sha256'); const input = fs.createReadStream(tempFilePath); input.on('data', (data) => { hash.update(data); }); input.on('end', () => { const fileName = file.originalname; const filePath = path.join(__dirname, 'uploads', fileName); const user_name = req.query.user_name // Check if file with same hash already exists in database const sqlCheck = 'SELECT * FROM images WHERE hash = ?'; connection.query(sqlCheck, [fileHash], function(err, result) { if (err) { console.log(err); return res.status(500).send('Error checking file in database'); } if (result.length > 0) { // If file with same hash exists, return "has been uploaded" console.log(result[0], 'result[0]') fs.unlinkSync(tempFilePath); // Delete the uploaded file return res.json({ message: 'File with same hash already uploaded', fileName: '识别成功,结果为:' + result[0].goods});//如果文件已经存在,则返回这个文件的对应的匹配结果 } else { fs.rename(tempFilePath, filePath, function(err) { if (err) { console.log(err); return res.status(500).send('Error uploading file'); } else { const sql = 'INSERT INTO images (name, path, hash, username) VALUES (?, ?, ?, ?)'; connection.query(sql, [fileName, filePath, fileHash, user_name], function(err, result) { if (err) { console.log(err); return res.status(500).send('Error uploading file to database'); } res.json({ message: 'File uploaded successfully', fileName: "识别失败,请重传文件:" + fileName }); }); } }); } }); }); }); var server = app.listen(8085, '0.0.0.0', function () { var host = server.address().address var port = server.address().port connection.connect(function(err){ if(err){ console.log('[query] - :'+err); return; } console.log('[connection connect] succeed!'); }); console.log("应用实例,访问地址为 http://%s:%s", host, port) })