使用 multer 上传文本
Uploading text with multer
所以我对编程还很陌生,如果我的代码混乱,我深表歉意。我想做的是制作一个网站,人们可以将消息和一些 photos/videos 上传到该网站。这将用于我的婚礼,我希望能够将 URL 分发给人们,以便他们可以上传他们拍摄的所有照片和视频,并添加一条好消息。到目前为止,我有一个使用 multer、express 和 bodyParaser 的 运行 服务器,我可以上传照片和视频,但不能上传 "textarea" 中输入的文本。我缺少什么可以让任何人在文本区域中写入的内容作为 .txt 文件上传到我的照片和视频所在的同一文件夹?
我的文件树是这样设置的:
Weddingupload_test
前端HTML
<form style="text-align: center;" action="/upload" enctype="multipart/form-data" method="POST">
<textarea class="textBox" name="message" rows="10" cols="50" placeholder="Share your favorite moment..."></textarea>
<div id=uploadBtn>
<label class="uploadBtn">
<input type="file" id="photo" name="photo" multiple accept="image/*,video/*,audio/*" />
Attach Images
</label>
</div>
<div id="submitBtn">
<input class="submitBtn" type="submit" name="Upload" value="Upload Photo" />
</div>
</form>
服务器端代码:
const express = require('express');
const multer = require('multer');
const bodyParser = require('body-parser');
const app = express();
const port = process.env.PORT || 3000;
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use('/', express.static(__dirname + '/public'));
const multerConfig = {
storage: multer.diskStorage({
destination: function(req, file, next){
next(null, './uploads/photos');
},
filename: function(req, file, next){
console.log(file);
const ext = file.mimetype.split('/')[1];
next(null, file.fieldname + '-' + Date.now() + '.'+ext);
}
})
};
app.get('/', function(req, res){
res.render('index.html');
});
app.post('/upload', multer(multerConfig).array('photo'),function(req, res){
res.sendFile('public/second.html', {root: __dirname })
});
app.listen(port,function(){
console.log(`Server listening on port ${port}`);});
首先将 value="text" 添加到 textarea。文本将在 req.body.text 上可用
然后我会使用 "fs" 模块创建一个包含您收到的文本文件。
- 编辑 index.html 这是文本区域 type="text"
<textarea type="text" class="textBox" name="message" rows="10" cols="50"
placeholder="Share your favorite moment..."></textarea>
- 在App.js中需要文件系统和路径
const fs = require('fs');
const path = require('path');
- 更新 multer 配置的目标函数以捕获文本并创建文本文件。
destination: function (req, file, next) {
let text = req.body.message;
let now = Date.now();
fs.writeFile(path.join(__dirname, './uploads/' + file.originalname + '-' + now + '.txt'), text, console.log);
next(null, './uploads');
}
所以我对编程还很陌生,如果我的代码混乱,我深表歉意。我想做的是制作一个网站,人们可以将消息和一些 photos/videos 上传到该网站。这将用于我的婚礼,我希望能够将 URL 分发给人们,以便他们可以上传他们拍摄的所有照片和视频,并添加一条好消息。到目前为止,我有一个使用 multer、express 和 bodyParaser 的 运行 服务器,我可以上传照片和视频,但不能上传 "textarea" 中输入的文本。我缺少什么可以让任何人在文本区域中写入的内容作为 .txt 文件上传到我的照片和视频所在的同一文件夹?
我的文件树是这样设置的: Weddingupload_test
前端HTML
<form style="text-align: center;" action="/upload" enctype="multipart/form-data" method="POST">
<textarea class="textBox" name="message" rows="10" cols="50" placeholder="Share your favorite moment..."></textarea>
<div id=uploadBtn>
<label class="uploadBtn">
<input type="file" id="photo" name="photo" multiple accept="image/*,video/*,audio/*" />
Attach Images
</label>
</div>
<div id="submitBtn">
<input class="submitBtn" type="submit" name="Upload" value="Upload Photo" />
</div>
</form>
服务器端代码:
const express = require('express');
const multer = require('multer');
const bodyParser = require('body-parser');
const app = express();
const port = process.env.PORT || 3000;
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use('/', express.static(__dirname + '/public'));
const multerConfig = {
storage: multer.diskStorage({
destination: function(req, file, next){
next(null, './uploads/photos');
},
filename: function(req, file, next){
console.log(file);
const ext = file.mimetype.split('/')[1];
next(null, file.fieldname + '-' + Date.now() + '.'+ext);
}
})
};
app.get('/', function(req, res){
res.render('index.html');
});
app.post('/upload', multer(multerConfig).array('photo'),function(req, res){
res.sendFile('public/second.html', {root: __dirname })
});
app.listen(port,function(){
console.log(`Server listening on port ${port}`);});
首先将 value="text" 添加到 textarea。文本将在 req.body.text 上可用 然后我会使用 "fs" 模块创建一个包含您收到的文本文件。
- 编辑 index.html 这是文本区域 type="text"
<textarea type="text" class="textBox" name="message" rows="10" cols="50"
placeholder="Share your favorite moment..."></textarea>
- 在App.js中需要文件系统和路径
const fs = require('fs');
const path = require('path');
- 更新 multer 配置的目标函数以捕获文本并创建文本文件。
destination: function (req, file, next) {
let text = req.body.message;
let now = Date.now();
fs.writeFile(path.join(__dirname, './uploads/' + file.originalname + '-' + now + '.txt'), text, console.log);
next(null, './uploads');
}