vue项目中上传头像的简易方法(一)

小咪咪 2022-03-11 08:51 1710阅读 0赞

作为一名代码届的前端码农,上传头像这样的功能肯定是见怪不怪了,
这两天有点儿空余时间,整理了一下上传头像的功能实现方法。

首先考虑上传的相关需求要求

(1) 格式要求(jpg | png | jpeg | gif )
(2) 大小要求(比如不超过300kb)
(3) 尺寸大小限制(1:1,4:9,9:16)
(4) 是否可以裁剪
(5) 单张还是多张(单张一般用在用户头像)

具体例子来解决问题

1、html部分

  1. <template>
  2. <div class="hello">
  3. <div class="user-header">
  4. <input type="file" name="image" accept="image/*" @change='onchangeImgFun'
  5. class="header-upload-btn user-header-com">
  6. <img alt="" :src='imgStr' class="user-header-img user-header-com">
  7. <p class="tip">图片限制50kb <span class="error">{
  8. {errorStr}}</span></p>
  9. </div>
  10. </div>
  11. </template>
  12. <!-- input 的accept属性可以用来解决格式筛选问题 -->

2、css部分

  1. <style scoped>
  2. .user-header{
  3. position: relative;
  4. display: inline-block;
  5. }
  6. .user-header-com{
  7. width: 144px;
  8. height: 144px;
  9. display: inline-block;
  10. }
  11. .header-upload-btn{
  12. position: absolute;
  13. left: 0;
  14. top: 0;
  15. opacity: 0;
  16. /* 通过定位把input放在img标签上面,通过不透明度隐藏 */
  17. }
  18. .tip{
  19. font-size: 14px;
  20. color: #666;
  21. }
  22. /* error是用于错误提示 */
  23. .error{
  24. font-size: 12px;
  25. color: tomato;
  26. margin-left: 10px;
  27. }
  28. </style>

3、js部分

  1. <script>
  2. export default {
  3. name: 'HelloWorld',
  4. data () {
  5. return {
  6. imgStr: require('../assets/upload.png'),
  7. errorStr: ''
  8. }
  9. },
  10. methods: {
  11. onchangeImgFun (e) {
  12. var file = e.target.files[0]
  13. console.log(file)
  14. // 获取图片的大小,做大小限制有用
  15. let imgSize = file.size
  16. console.log(imgSize)
  17. var _this = this // this指向问题,所以在外面先定义
  18. // 比如上传头像限制5M大小,这里获取的大小单位是b
  19. if (imgSize <= 50 * 1024) {
  20. // 合格
  21. _this.errorStr = ''
  22. console.log('大小合适')
  23. // 开始渲染选择的图片
  24. // 本地路径方法 1
  25. // this.imgStr = window.URL.createObjectURL(e.target.files[0])
  26. // console.log(window.URL.createObjectURL(e.target.files[0])) // 获取当前文件的信息
  27. // base64方法 2
  28. var reader = new FileReader()
  29. reader.readAsDataURL(file) // 读出 base64
  30. reader.onloadend = function () {
  31. // 图片的 base64 格式, 可以直接当成 img 的 src 属性值
  32. var dataURL = reader.result
  33. console.log(dataURL)
  34. _this.imgStr = dataURL
  35. // 下面逻辑处理
  36. }
  37. } else {
  38. console.log('大小不合适')
  39. _this.errorStr = '图片大小超出范围'
  40. }
  41. }
  42. }
  43. }
  44. </script>

用户选择图片之后的渲染方法有两种

  • 本地路径方法转化 window.URL.createObjectURL
  • FileReader转化为base64格式

到这里,最简单的上传头像问题就解决了,
上传前
(上传前)
在这里插入图片描述
(上传后)

下期更新怎么实现裁剪相关需求

发表评论

表情:
评论列表 (有 0 条评论,1710人围观)

还没有评论,来说两句吧...

相关阅读

    相关 本地项目Github简易教程

    在日常的开发过程中,我们一般都会有些组件或者框架代码的积累,但是组件代码如何分享开源出去是个比较麻烦的问题,但是自从有了Github一下子就简单多了,大家可以很方便的将代码挂到

    相关 vue裁剪并头像

    之前,在用vue写一个上传头像的模块,里面需要对头像进行拖动裁剪设置,可是后台却跟我说他只要类似于input上传图片的内容。前端是没有办法操作本地图片的,一般也只能是传图片+裁