当前位置:   article > 正文

el-upload使用http-request实现图片上传,回显,放大效果_el-upload http-request

el-upload http-request

        在项目开发中,为了实现上传文件的功能,我们需要用到el-upload这个组件,为了实现回显放大效果,就要用到el-image这个组件了。官方文档中介绍了上传的两种方法,一个是使用action,其参数必须要上传的地址;另一个是http-request,该方法覆盖默认的上传行为,可以自定义上传的实现。下面阐述如何实现图片上传,回显,放大效果。

官方文档:Element - The world's most popular Vue UI framework

el-upload组件相关api介绍:

上传图片有以下这些几种方式,开发者可以根据项目实际情况进行选择。

  • 传入自定义的上传按钮类型和文字提示

  1. <el-upload
  2. class="upload-demo"
  3. action="https://jsonplaceholder.typicode.com/posts/"
  4. :on-preview="handlePreview"
  5. :on-remove="handleRemove"
  6. :before-remove="beforeRemove"
  7. multiple
  8. :limit="3"
  9. :on-exceed="handleExceed"
  10. :file-list="fileList">
  11. <el-button size="small" type="primary">点击上传</el-button>
  12. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  13. </el-upload>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. 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'}]
  19. };
  20. },
  21. methods: {
  22. handleRemove(file, fileList) {
  23. console.log(file, fileList);
  24. },
  25. handlePreview(file) {
  26. console.log(file);
  27. },
  28. handleExceed(files, fileList) {
  29. this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
  30. },
  31. beforeRemove(file, fileList) {
  32. return this.$confirm(`确定移除 ${ file.name }?`);
  33. }
  34. }
  35. }
  36. </script>
  • 照片墙,可以回显图片

代码如下:

  1. <el-upload
  2. action="https://jsonplaceholder.typicode.com/posts/"
  3. list-type="picture-card"
  4. :on-preview="handlePictureCardPreview"
  5. :on-remove="handleRemove">
  6. <i class="el-icon-plus"></i>
  7. </el-upload>
  8. <el-dialog :visible.sync="dialogVisible">
  9. <img width="100%" :src="dialogImageUrl" alt="">
  10. </el-dialog>
  11. <script>
  12. export default {
  13. data() {
  14. return {
  15. dialogImageUrl: '',
  16. dialogVisible: false
  17. };
  18. },
  19. methods: {
  20. handleRemove(file, fileList) {
  21. console.log(file, fileList);
  22. },
  23. handlePictureCardPreview(file) {
  24. this.dialogImageUrl = file.url;
  25. this.dialogVisible = true;
  26. }
  27. }
  28. }
  29. </script>
  • 可以对图片进行拖拽

代码如下:

  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>
  8. <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
  9. </el-upload>

 通过以上介绍我们已经初步了解了el-upload的用法,下面我们来看图片上传回显放大的实现过程。代码如下:

  1. <el-upload
  2. ref="upload"
  3. class="upload-demo"
  4. action="#"
  5. :on-remove="remove"
  6. list-type="picture"
  7. :http-request="handler"
  8. :limit="limit"
  9. :accept="'.png,.jpg,.jpeg'"
  10. :on-exceed="onExceed"
  11. :before-upload="beforeAvatarUpload"
  12. :file-list="fileList"
  13. >
  14. <el-button size="small" type="primary" icon="el-icon-upload"
  15. >上传图片</el-button
  16. >
  17. <div slot="file" slot-scope="{ file }">
  18. <div style="display: flex; align-items: center">
  19. <el-image
  20. style="width: 78px; height: 78px"
  21. :src="file.url"
  22. :preview-src-list="[file.url]"
  23. ></el-image>
  24. <div style="font-size: 15px; font-weight: bold; margin-left: 32px">
  25. <el-tooltip :content="file.name" :disabled="isShow" placement="top">
  26. <div @mouseover="inputOnMouseOver(file.name)">
  27. {{
  28. file.name.length > 10
  29. ? file.name.slice(0, 10) + "..."
  30. : file.name
  31. }}
  32. </div></el-tooltip
  33. >
  34. </div>
  35. <div style="margin-left: 32px">
  36. <i
  37. class="el-icon-close"
  38. @click="remove"
  39. style="display: inline-block; font-size: 18px"
  40. ></i>
  41. </div>
  42. </div>
  43. </div>
  44. </el-upload>
  1. methods: {
  2. //fileList存放上传的图片 file是对象
  3. handler(file) {
  4. this.fileList = [file];
  5. },
  6. // 校验上传的文件数量是否超出限制
  7. onExceed() {
  8. this.$message.error(`只能上传${this.limit}张图片!`);
  9. },
  10. // 移除图片时清空
  11. remove(file) {
  12. this.$refs.upload.clearFiles();
  13. },
  14. // 上传前校验图片格式
  15. beforeAvatarUpload(file) {
  16. const isType = ["image/jpg", "image/png", "image/jpeg"].includes(
  17. file.type
  18. );
  19. if (!isType) {
  20. this.$message({
  21. message: "只能上传格式为PNG,JPG,JPEG的图片!",
  22. type: "warning",
  23. });
  24. }
  25. return isType;
  26. },
  27. // 图片名字过长处理
  28. inputOnMouseOver(name) {
  29. if (name.length < 10) {
  30. this.isShow = true;
  31. } else {
  32. this.isShow = false;
  33. }
  34. },
  35. },

效果如下,点击图片可以实现放大效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/197187
推荐阅读
相关标签
  

闽ICP备14008679号