0


使用 element ui 上传文件图片的方法 和 后台要如何获取并保c存到对应文件夹中

  1. 1. action 添加 要上传的路由地址
  2. 2.使用data属性向路由提交 数据
  3. 3.后台使用path malter第三方插件 存储图片 可以使用图片原有的名称
  4. 4.使用formilder 第三方插件

一、element ui 上传图片

  1. 在action 添加 要上传的路由地址

2.使用data属性上传files 数据

3.这样就可以上传图片了。之后就是后台怎么获取文件和保存

  1. <template>
  2. <el-upload
  3. class="upload-demo"
  4. :action="uploadUrl"
  5. :on-preview="handlePreview"
  6. :on-remove="handleRemove"
  7. :file-list="fileList"
  8. :headers="headerObj"
  9. list-type="picture"
  10. :data="file"
  11. >
  12. <el-button size="small" type="primary">点击上传</el-button>
  13. </el-upload>
  14. </template>
  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. headerObj: {
  6. file:'',
  7. Authorization: window.sessionStorage.getItem("token"),
  8. },
  9. //1.配置要上传文件的路由
  10. uploadUrl: "http://localhost:3000/upload",
  11. fileList: [],
  12. };
  13. },
  14. methods: {
  15. // 处理图片的操作
  16. handleRemove(file, fileList) {
  17. console.log(file, fileList);
  18. //2.data属性的值 要提交的post 路由的数据 file 图片数据
  19. this.file=file
  20. },
  21. // 处理图片的效果
  22. handlePreview(file) {
  23. console.log(file);
  24. },
  25. },
  26. };
  27. </script>

二、后台获取文件

方法1

1.后台使用path malter第三方插件 存储图片 可以使用图片原有的名称

1.安装 multer库
yarn add multer -d
npm i multer -d

2.配置方法

1.创建一个multer.js文件夹

2.配置图片的保持路径以父级为开始

列入a为根目录 :a/ms/multer.js 存放图片的文件a/uploads

路径就为 ./uploads

  1. const multer = require('multer')
  2. const path = require("path");
  3. const storage = multer.diskStorage({
  4. destination: function (req, file, cb) {
  5. // 上传的文件目录(文件上传以后放在哪里)
  6. cb(null, './uploads')
  7. },
  8. filename: function (req, file, cb) {
  9. //上传的文件名字 (文件名+‘-’+时间戳+源文件的后缀名【例如:jpg/png......】)
  10. // 可以使用图片原来的名称,但是如果名称重复了,会被覆盖
  11. cb(null, file.fieldname + '-' + Date.now()+path.extname(file.originalname))
  12. }
  13. })
  14. const upload = multer({ storage: storage })

3.路由使用

0.导入multer.js文件

  1. // 导入图片存储位置
  2. const upload = require("./multer.js");

1.在post()内的路由添加以下代码

2.使用 req.file 获取传递过来的路径了

3.res.send()响应会你要响应的数据

upload.single('file')

  1. Router.post("/upload",upload.single('file'), (req, res) => {
  2. res.send({ success: req.file });
  3. });

图片就出来了

方法2

使用formidable第三方插件

1.安装 formidable 库

npm install formidable -d

2.导入

const formidable = require('formidable')

const path = require('path')

3.配置

  1. app.post('/load',tou,(req,res,next)=>{
  2. //创建一个form表单对象
  3. const form = new formidable.IncomingForm()
  4. form.encoding = 'utf-8'; //设置编码格式
  5. form.options.keepExtensions = true //保留后缀名
  6. // 设置文件上传文件夹/路径,__dirname是一个常量,为当前路径
  7. var uploadDir = path.join(__dirname, "./public/load");
  8. form.uploadDir = uploadDir; //本地文件夹目录路径
  9. console.log(form.uploadDir);
  10. next()
  11. form.parse(req,(err,fields,files) => {
  12. console.log(files);
  13. })
  14. })

注意next不写。文件目录结构

前端html代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form class="form-container" id="form" enctype="multipart/form-data">
  9. <div class="form-group">
  10. <label>商品名称</label>
  11. <input type="text" name="p_name" class="form-control" placeholder="请输入商品名称">
  12. </div>
  13. <div class="form-group">
  14. <label>商品价格</label>
  15. <input type="text" name="price" class="form-control" placeholder="请输入商品价格">
  16. </div>
  17. <div class="form-group">
  18. <label>商品描述</label>
  19. <textarea name="p_describe" id="" cols="30" rows="10" class="p_describe form-control"></textarea>
  20. </div>
  21. <div class="form-group">
  22. <label>商品图片</label>
  23. <input type="file" name="img_src" class="form-contro " id="file_input">
  24. <img src="" alt="" id="result" style=" max-width: 500px; vertical-align: middle;">
  25. </div>
  26. <div class="form-group">
  27. <label>角色</label>
  28. <select name="c_id" class="form-control">
  29. <option selected value="0">手办</option>
  30. <option value="1">服装</option>
  31. </select>
  32. </div>
  33. <!-- 用户状态 -->
  34. <!-- <div class="form-group">
  35. <label>状态</label>
  36. <select name="status" class="form-control">
  37. <option selected value="1">正常</option>
  38. <option value="2">禁用</option>
  39. </select>
  40. </div> -->
  41. <div class="buttons" id="ti">
  42. <input type="button" class="btn btn-primary submit" value="提交">
  43. <span style="margin-left: 10px;color:aquamarine" id="span2"></span>
  44. </div>
  45. </form>
  46. </body>
  47. </html>
  48. <script>
  49. window.addEventListener('load', function (params) {
  50. var result = document.getElementById("result");
  51. var input = document.getElementById("file_input");
  52. if (typeof FileReader === 'undefined') {
  53. result.innerHTML = "抱歉,你的浏览器不支持 FileReader";
  54. input.setAttribute('disabled', 'disabled');
  55. } else {
  56. input.addEventListener('change', readFile, false);
  57. }
  58. function readFile() {
  59. // 第一步:获取文件
  60. var file = this.files[0];
  61. if (!/image\/\w+/.test(file.type)) {
  62. alert("文件必须为图片!");
  63. return false;
  64. }
  65. // 使用FileReader读取文件
  66. var reader = new FileReader();
  67. // 第二步:读取文件
  68. reader.readAsDataURL(file);
  69. // 第三步:将读取完的结果赋给页面上的img标签
  70. reader.onload = function (e) {
  71. result.src = this.result
  72. }
  73. }
  74. var submit = document.querySelector('.submit')
  75. var form1 = document.querySelector('#form')
  76. submit.addEventListener('click', (e) => {
  77. var formData = new FormData(form1)//dom对象form1
  78. let xhr = new XMLHttpRequest()
  79. xhr.open("post", 'http://localhost:3333/load',)
  80. xhr.send(formData)
  81. xhr.onload = function () {
  82. console.log(1);
  83. //根据对象http状态进行判断
  84. if (xhr.status == 200) {
  85. // console.log(xhr.responseText);
  86. // location = "./goods.html"
  87. }
  88. }
  89. })
  90. })
  91. // http://localhost:3333/aa.html
  92. </script>

后端完整代码

  1. const express = require('express')
  2. const app = express()
  3. app.use(express.static('public'))
  4. // //注册body-parser
  5. // const parser = require('body-parser')
  6. // app.use(parser.urlencoded({ extended: false }))
  7. function tou(req, res, next) {
  8. // 允许那些客户端可以访问(跨域请求),get为get请求,post为post请求,*为全都可以
  9. //允许跨域操作的具体域名
  10. res.header("Access-Control-Allow-Origin", "*")
  11. // 允许客户端使用那些请求方法 允许跨域的HTTP方法
  12. res.header('Access-Control-Allow-Methods', "GET,POST")
  13. // 允许客户端请求的同时携带cookie信息
  14. res.header('Access-Control-Allow-Credentials', "true")
  15. next()
  16. }
  17. const cors = require('cors')
  18. app.use(cors())
  19. const formidable = require('formidable')
  20. const path = require('path')
  21. app.post('/load',tou,(req,res,next)=>{
  22. console.log(1112);
  23. //创建一个form表单对象
  24. const form = new formidable.IncomingForm()
  25. form.encoding = 'utf-8'; //设置编码格式
  26. form.options.keepExtensions = true //保留后缀名
  27. // 设置文件上传文件夹/路径,__dirname是一个常量,为当前路径
  28. var uploadDir = path.join(__dirname, "./public/load");
  29. form.uploadDir = uploadDir; //本地文件夹目录路径
  30. console.log(form.uploadDir);
  31. next()
  32. form.parse(req,(err,fields,files) => {
  33. console.log(files);
  34. })
  35. })
  36. const port = 3333
  37. app.listen(port, () => {
  38. console.log(port)
  39. })

本文转载自: https://blog.csdn.net/weixin_50582284/article/details/126843974
版权归原作者 @饭团 所有, 如有侵权,请联系我们删除。

“使用 element ui 上传文件图片的方法 和 后台要如何获取并保c存到对应文件夹中”的评论:

还没有评论