1.前言
只是上传流程,
2.前端上传准备
html
<label>上传:</label> <!-- accept 可选择的文件类型 --> <!-- multiple 多个 可以选择多个文件 --> <input type="file" style="display: none;" id="input" multiple accept="image/gif,image/jpeg"> <button id="btn">上传</button>
js
btn.onclick = function () { input.click(); } input.onchange = function (e) { // 获取所选择的文件 // console.log(e.target.files); let file = e.target.files[0]; console.log(file); // 获取所有选中文件的容量 let total = 0; for(let i = 0;i < e.target.files.length;i++){ let file = e.target.files[i]; console.log(file.name); console.log(file.size); total += file.size; } console.log(total); }
3.前端上传-node后台处理逻辑分析
前端
<input type="file"> <button>上传</button> <div id="show"></div> <script src="./jquery.min.js"></script>
js
$("button").click(function () { // 获取上传的数据 let file = $("input")[0].files[0]; // 设置请求参数 // serialize 其不支持二进制数据传输,因此无法上传文件 let formData = new FormData(); formData.append("fileInfo",file); // $.ajax({ type: "POST", url: "http://localhost:3000/myupload", data: formData, processData:false,//默认情况下,processData 的值是 true,其代表以对象的形式上传的数据都会被转换为字符串的形式上传。而当上传文件的时候,则不需要把其转换为字符串,因此要改成false contentType:false,//其代表的是 前端发送数据的格式 默认值: success: function (response) { console.log(response);// 请求成功 // alert("成功") // 成功后修改 样式 $("#show").css({ // 注意路径问题!!!!! backgroundImage:`url(/uploads/${response.path})`, backgroundSize:"100% 100%", }) } }); })
服务端
使用了 multer上传插件
var express = require('express'); ar router = express.Router(); var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, __dirname+'/uploads/') }, filename: function (req, file, cb) { var arr = file.originalname.split('.'); var fileExt = arr[arr.length - 1]; cb(null, file.fieldname + '-' + Date.now() + '.' + fileExt) } }) var upload = multer({ storage: storage }) router.post('/myupload', upload.single('fileInfo'), function (req, res) { // console.log("upload---",req); var fileName = req.file.filename; var arr = req.file.originalname.split('.'); var fileExt = arr[arr.length - 1]; var path = `${fileName}.${fileExt}`; res.json({ code: 200, message: "上传成功", path: fileName }) })