vue element UI图片上传到fastDFS 前/后台实现图片显示

第一次开发element图片上传,到网上找了很多例子,感觉不全面,所以才写了这篇文章,希望帮助新手快速开发。

vue 使用element实现本地预览 最主要的是将图片路径转换为base64

VUE HTML

<el-form-item label="图片" prop="imgSrc" :label-width="formLabelWidth"> 
   <el-upload
    class="avatar-uploader"
	action="#" 
	v-model="dataForm.imgSrc"
	:show-file-list="false"
	:on-success="handleAvatarSuccess"
	:on-change="onchange"
	:before-upload="handleBeforeUpload"> 
	<i class="el-icon-plus"></i>
   </el-upload>
   <img v-if="imageUrl" :src="imageUrl" class="avatar">
   <i v-else class="el-icon-plus avatar-uploader-icon"></i>  
</el-form-item>

JS

data() {
		return {
			 
			dataFormRules: {
				 
				imgSrc: [{ 
					required: true, message: '请上传图片', trigger: 'blur' 
				}]
			},
			 
			// 新增编辑界面数据
			dataForm: {
				id: 0,
				displayTypeName: '',
				monitorFactorOptions:'',
				imgSrc:'',
				remarks: ''
			},
			//图片
			imageUrl: '' 

		}
	},
methods: {
		// 显示编辑界面
		handleEdit: function (row) {
			this.editDialogVisible = true
			this.operation = false
			this.dataForm = Object.assign({}, row)
			this.imageUrl = row.imgSrc
		},
        handleAvatarSuccess(res, file) {
			this.imageUrl = URL.createObjectURL(file.raw); 
		},
		// 上传文件之前的方法
		handleBeforeUpload(file){		
			if(!(file.type === 'image/png' || file.type === 'image/gif' || file.type === 'image/jpg' || file.type === 'image/jpeg')) {
				this.$message.error('上传图片格式为image/png, image/gif, image/jpg, image/jpeg的图片!');
				return isJPG
			}
			const isLt2M = file.size / 1024 / 1024 < 2;
			if (!isLt2M) {
				this.$message.error('上传图片大小不能超过 2MB!');
				return isLt2M
			} 

			let fd = new FormData();
			fd.append('file',file);//传文件 
			//上传到后台
			imgUpload(fd).then(res => {  
				this.dataForm.imgSrc = res.data; 
				this.$message({ message: "上传成功", type: "success" });
			});					
		},
		//当上传图片后,调用onchange方法,获取图片本地路径
		onchange(file,fileList){
			var _this = this;
			var event = event || window.event;
			if(event.target.files!=undefined){
				var file = event.target.files[0];
				var reader = new FileReader(); 
				//转base64
				reader.onload = function(e) {
				_this.imageUrl = e.target.result //将图片路径赋值给src
				}
				reader.readAsDataURL(file);
			}
		}, 

}


// 上传图片
export function imgUpload(data) {
  return request({
    url: '/iot-business-app/displayType/imgUpload',
    method: 'post',
    data
  })
}

Java

 /**
     * 图片上传
     * @param file
     * @return
     * @throws IOException
     */
    @RequestMapping(value="/imgUpload",method= RequestMethod.POST)
    @ResponseBody
    public Map imgUpload(@RequestParam("file") MultipartFile file) {
        String url=null;
        String ext_name=null;
        if(file!=null) {
            try {
                String s[]=(file.getOriginalFilename()).split("\\.");
                if(s.length==2) {
                    ext_name=s[1];
                }
                ClientGlobal.init("fdfs_client.conf");
                TrackerClient trackerClient = new TrackerClient();
                TrackerServer trackerServer = trackerClient.getConnection();
                StorageClient1 storageClient1 = new StorageClient1(trackerServer, null);
                url = "http://192.168.1.234:8888/"+storageClient1.upload_file1(file.getBytes(),ext_name,null);

//                url= "{url:\""+strs+"\",filename:\""+file.getOriginalFilename()+"\"}";
                System.out.println("========url========"+url);
            } catch (IOException | MyException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            }
        }
        Map<String ,Object> res=new HashedMap();
        res.put("code",20000);
        res.put("data",url);
        return res;
    }

Java配置文件fdfs_client.conf

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 80
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 192.168.1.234:22122

效果展示:

新增上传效果

加载编辑页面显示图片效果:

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值