通过 slot 你可以传入自定义的上传按钮类型和文字提示。可通过设置和on-exceed来限制上传文件的个数和定义超出限制时的行为。可通过设置before-remove来阻止文件移除操作。

    用户头像上传

    使用 before-upload 限制用户上传的图片格式和大小。

    1. <el-upload
    2. class="avatar-uploader"
    3. action="https://jsonplaceholder.typicode.com/posts/"
    4. :show-file-list="false"
    5. :on-success="handleAvatarSuccess"
    6. :before-upload="beforeAvatarUpload">
    7. <img v-if="imageUrl" :src="imageUrl" class="avatar">
    8. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    9. </el-upload>
    10. <style>
    11. .avatar-uploader .el-upload {
    12. border: 1px dashed #d9d9d9;
    13. border-radius: 6px;
    14. cursor: pointer;
    15. position: relative;
    16. overflow: hidden;
    17. }
    18. .avatar-uploader .el-upload:hover {
    19. border-color: #409EFF;
    20. }
    21. .avatar-uploader-icon {
    22. font-size: 28px;
    23. color: #8c939d;
    24. width: 178px;
    25. height: 178px;
    26. line-height: 178px;
    27. text-align: center;
    28. }
    29. .avatar {
    30. width: 178px;
    31. height: 178px;
    32. display: block;
    33. }
    34. </style>
    35. <script>
    36. export default {
    37. data() {
    38. return {
    39. imageUrl: ''
    40. };
    41. },
    42. methods: {
    43. handleAvatarSuccess(res, file) {
    44. this.imageUrl = URL.createObjectURL(file.raw);
    45. },
    46. beforeAvatarUpload(file) {
    47. const isJPG = file.type === 'image/jpeg';
    48. const isLt2M = file.size / 1024 / 1024 < 2;
    49. if (!isJPG) {
    50. }
    51. if (!isLt2M) {
    52. this.$message.error('上传头像图片大小不能超过 2MB!');
    53. }
    54. return isJPG && isLt2M;
    55. }
    56. }
    57. </script>

    照片墙

    使用 list-type 属性来设置文件列表的样式。

    Upload 上传 - 图1

    使用 scoped-slot 去设置缩略图模版。

    1. <el-upload
    2. action="#"
    3. list-type="picture-card"
    4. :auto-upload="false">
    5. <i slot="default" class="el-icon-plus"></i>
    6. <div slot="file" slot-scope="{file}">
    7. <img
    8. class="el-upload-list__item-thumbnail"
    9. :src="file.url" alt=""
    10. >
    11. <span class="el-upload-list__item-actions">
    12. <span
    13. class="el-upload-list__item-preview"
    14. @click="handlePictureCardPreview(file)"
    15. >
    16. <i class="el-icon-zoom-in"></i>
    17. </span>
    18. <span
    19. v-if="!disabled"
    20. class="el-upload-list__item-delete"
    21. @click="handleDownload(file)"
    22. >
    23. <i class="el-icon-download"></i>
    24. </span>
    25. <span
    26. v-if="!disabled"
    27. class="el-upload-list__item-delete"
    28. @click="handleRemove(file)"
    29. >
    30. <i class="el-icon-delete"></i>
    31. </span>
    32. </span>
    33. </div>
    34. </el-upload>
    35. <el-dialog :visible.sync="dialogVisible">
    36. <img width="100%" :src="dialogImageUrl" alt="">
    37. </el-dialog>
    38. <script>
    39. export default {
    40. data() {
    41. return {
    42. dialogImageUrl: '',
    43. dialogVisible: false,
    44. disabled: false
    45. };
    46. },
    47. methods: {
    48. handleRemove(file) {
    49. console.log(file);
    50. },
    51. handlePictureCardPreview(file) {
    52. this.dialogImageUrl = file.url;
    53. this.dialogVisible = true;
    54. },
    55. console.log(file);
    56. }
    57. }
    58. </script>

    图片列表缩略图

    上传文件列表控制

    通过 on-change 钩子函数来对列表进行控制

    Upload 上传 - 图2

    1. <el-upload
    2. class="upload-demo"
    3. action="https://jsonplaceholder.typicode.com/posts/"
    4. :on-change="handleChange"
    5. :file-list="fileList">
    6. <el-button size="small" type="primary">点击上传</el-button>
    7. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    8. </el-upload>
    9. <script>
    10. export default {
    11. data() {
    12. return {
    13. fileList: [{
    14. name: 'food.jpeg',
    15. url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
    16. }, {
    17. name: 'food2.jpeg',
    18. url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
    19. }]
    20. };
    21. },
    22. methods: {
    23. handleChange(file, fileList) {
    24. this.fileList = fileList.slice(-3);
    25. }
    26. }
    27. }
    28. </script>

    手动上传

    1. <el-upload
    2. class="upload-demo"
    3. ref="upload"
    4. action="https://jsonplaceholder.typicode.com/posts/"
    5. :on-preview="handlePreview"
    6. :on-remove="handleRemove"
    7. :file-list="fileList"
    8. :auto-upload="false">
    9. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
    10. <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
    11. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    12. </el-upload>
    13. <script>
    14. export default {
    15. data() {
    16. return {
    17. fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
    18. };
    19. },
    20. methods: {
    21. submitUpload() {
    22. this.$refs.upload.submit();
    23. },
    24. handleRemove(file, fileList) {
    25. console.log(file, fileList);
    26. },
    27. handlePreview(file) {
    28. console.log(file);
    29. }
    30. }
    31. </script>

    Attribute

    Methods