通过 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. line-height: 178px;
    26. text-align: center;
    27. }
    28. .avatar {
    29. height: 178px;
    30. display: block;
    31. }
    32. </style>
    33. <script>
    34. export default {
    35. data() {
    36. return {
    37. imageUrl: ''
    38. };
    39. },
    40. methods: {
    41. handleAvatarSuccess(res, file) {
    42. this.imageUrl = URL.createObjectURL(file.raw);
    43. },
    44. beforeAvatarUpload(file) {
    45. const isJPG = file.type === 'image/jpeg';
    46. const isLt2M = file.size / 1024 / 1024 < 2;
    47. if (!isJPG) {
    48. this.$message.error('上传头像图片只能是 JPG 格式!');
    49. }
    50. if (!isLt2M) {
    51. this.$message.error('上传头像图片大小不能超过 2MB!');
    52. }
    53. return isJPG && isLt2M;
    54. }
    55. }
    56. }

    照片墙

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

    Upload 上传 - 图3

    1. <el-upload
    2. action="https://jsonplaceholder.typicode.com/posts/"
    3. :on-preview="handlePreview"
    4. :on-remove="handleRemove"
    5. :file-list="fileList"
    6. list-type="picture">
    7. <el-button size="small" type="primary">点击上传</el-button>
    8. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    9. </el-upload>
    10. <script>
    11. export default {
    12. data() {
    13. return {
    14. 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'}]
    15. };
    16. },
    17. methods: {
    18. handleRemove(file, fileList) {
    19. console.log(file, fileList);
    20. },
    21. handlePreview(file) {
    22. console.log(file);
    23. }
    24. }
    25. }
    26. </script>

    上传文件列表控制

    Upload 上传 - 图5

    拖拽上传

    1. <el-upload
    2. class="upload-demo"
    3. drag
    4. action="https://jsonplaceholder.typicode.com/posts/"
    5. multiple>
    6. <i class="el-icon-upload"></i>
    7. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>

    Upload 上传 - 图7

    Attribute

    Slot