javascript - 如何使用 multer 将文件正确上传到 fs
问题描述
我第一次尝试 multer,我对如何上传所选文件感到困惑。我使用 ajax 成功建立了与后端的连接,而我感到困惑的是
- 我是否分配了文件输入数据以正确发送到后端?我正在获取输入文件元素的原始值输出并将其当前发送到后端。那是正确的方法吗?
- 当在我的后端调用 multer 上传功能时
app.post
,“myFile”upload.single('myFile')
目前代表什么,我假设它是从客户端发送的文件名。那正确吗? - 最后如何分配特定目录以将上传的文件保存在 fs 中?任何帮助表示赞赏。提前致谢。
const express = require('express');
const multer = require("multer")
const path = require('path');
const app = express()
const bodyParser = require('body-parser')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
const port = process.env.PORT || 3000
var cors = require('cors');
app.use(cors());
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
next();
});
app.listen(port, () => {
console.log('Server is up on port ' + port);
})
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "uploads/")
},
filename: (req, file, cb) => {
cb(null, Date.now() + "-" + file.originalname)
},
})
const uploadStorage = multer({
storage: storage
})
app.post('/uploadImage', upload.single('myFile'), (req, res, next) => {
try {
res.send(req.body);
console.log(req.body.chooseFileValue)
} catch (error) {
console.log(error);
res.send(400);
}
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<h1>Single File Upload Demo</h1>
<form name="mainForm" action="/uploadProfilePicture" enctype="multipart/form-data" method="POST">
<span>Upload Profile Picture:</span>
<input type="file" name="mypic" id="chooseFile" required /> <br>
<button type="button" class="uploadBtn" id="uploadBtn">Upload</button>
</form>
<script>
var chooseFile = document.getElementById('chooseFile')
$('#uploadBtn').click(function() {
console.log(chooseFile.value)
$.ajax({
url: 'http://localhost:3000/uploadImage',
type: 'POST',
"crossDomain": true,
headers: {
"accept": "application/json",
"Access-Control-Allow-Origin": "*"
},
cache: false,
data: {
"chooseFileValue": chooseFile.value
},
success: function(data) {
console.log(data)
},
error: function(jqXHR, textStatus, err) {
alert('text status ' + textStatus + ', err ' + err)
}
})
});
</script>
</body>
</html>
解决方案
推荐阅读
- laravel - PrivateChannel Laravel 推送器
- javascript - 在我的反应应用程序中获取 net::ERR_ABORTED 401
- batch-file - 用于每天检查存档路径中是否存在随机文件的 Batscript,并应在最后 30 分钟内检查文件是否已处理
- jmeter - 在 JMeter 中录制时无法上传文件
- html - 如何在 HTML 页面中使用 JSF 组件?
- php - 如何在 Wordpress 中通过 ajax 重新获取/检索 wp.media 对象
- node.js - Google oAuth 流程是否适用于响应本机应用程序
- android - 获取配置文件不同于 GATT 和 GATT_SERVER 的已连接设备列表
- python-3.x - 如何找到使用 python 完成给定供应网络的供应商明智成本
- unit-testing - 如何编写测试用例来验证 OAuth 令牌?