vue学习——element-ui的upload功能图片究竟上传到哪了?

<el-upload
  action=""
  accept="image/jpeg,image/png"
  :on-change="onUploadChange"
  :auto-upload="false"
  :show-file-list="false">
    <el-button slot="trigger" size="small" type="primary">选取</el-button>
    <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不能超过1m</div>
</el-upload>

这段上传功能的代码,其中action参数是告诉我们数据或者图片要发送到哪里,通常是后台的接口。
有时数据或者图片是选取和上传是分开的,选取后的图片是传到了前端页面,传到后台是需要一些其他的操作,将前端的文件转为base64的信息传到后台。

在这里插入图片描述
这里面的问题就是,用上传的浏览器打开可以看见图片,但是用另外的浏览器查看就不能显示图片了,原因就是图片并没有传到服务器,只是传到了浏览器缓存的地方,清楚浏览器的缓存后就不能显示图片了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装element-ui和axios ``` npm install element-ui axios ``` 2. 在main.js中引入element-ui和axios ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import axios from 'axios' Vue.use(ElementUI) Vue.prototype.$axios = axios ``` 3. 在组件中使用el-upload组件 ```html <template> <div> <el-upload class="upload-demo" action="/api/upload" :on-success="handleSuccess" :before-upload="beforeUpload" :headers="{Authorization: token}"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </div> </template> ``` 其中,action是上传的接口地址,on-success是上传成功后的回调函数,before-upload是上传前的钩子函数,headers是请求头部,可以传递token等信息。 4. 在methods中定义handleSuccess和beforeUpload函数 ```javascript methods: { handleSuccess(response, file, fileList) { console.log(response) // 在这里处理上传成功后的响应数据 }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' const isLt500K = file.size / 1024 < 500 if (!isJPG) { this.$message.error('上传图片只能是 JPG/PNG 格式!') } if (!isLt500K) { this.$message.error('上传图片大小不能超过 500KB!') } return isJPG && isLt500K } } ``` 在beforeUpload函数中,可以对上传的图片进行格式、大小等限制。 5. 在后端接口中处理上传的图片 在后端接口中,可以使用express框架的multer中间件来处理上传的图片。安装multer: ``` npm install multer ``` 在express中引入multer,并设置上传的文件夹: ```javascript const express = require('express') const multer = require('multer') const app = express() const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now() + '.jpg') } }) const upload = multer({ storage: storage }) app.post('/api/upload', upload.single('file'), (req, res) => { console.log(req.file) // 在这里处理上传成功后的响应数据 }) ``` 在这里,上传的文件会被保存到uploads文件夹下,文件名会以字段名和时间戳命名。 注意:在使用express中间件处理上传文件时,需要使用body-parser中间件。安装body-parser: ``` npm install body-parser ``` 在express中引入body-parser: ```javascript const bodyParser = require('body-parser') app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) ``` 完整代码如下: ```javascript const express = require('express') const multer = require('multer') const bodyParser = require('body-parser') const app = express() const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now() + '.jpg') } }) const upload = multer({ storage: storage }) app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) app.post('/api/upload', upload.single('file'), (req, res) => { console.log(req.file) // 在这里处理上传成功后的响应数据 }) app.listen(3000, () => console.log('Server is running...')) ``` 注意:在使用element-ui的上传组件时,需要设置上传的文件类型和大小限制,但是这只是客户端的限制,如果后端没有做相应的处理,仍然可以上传非指定类型和大小的文件,因此,在后端接口中也需要对上传的文件进行相应的限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值