图片上传(二进制文件流)

业务需求:

  • 文件上传在项目开发过程中是必不可少的一项功能。目前大多数文件上传都是采用文件流的形式进行上传。随着技术的进步,云服务技术的产生,现在上传文件相比原来更迅速、更方便,对上传文件的管理较之前来说方便了许多;
  • 为兼顾原有的项目,上传文件没有采用现在使用比较多的阿里云oss文件直传,而是采用的后台辅助存储上传的形式来进行文件的存储。相对来说,文件上传比较慢,等待时间有点长。获取文件不像oss直传那样返回一个绝对的地址链接,而是返回的一个文件的key,通过指定的参数拼接来换取图片地址;
  • 此次简称为‘文件流上传’,前期开发的时候出现了一些错误,现将原有的文件流上传文件的具体实现步骤做相应分析处理,以便日后开发过程中使用。

效果图:

在这里插入图片描述

  • :图片上传成功后,会在右侧灰色图片区域内进行展示。

布局代码一:

在这里插入图片描述

  • 基于【 Vue 】
  • 采用elementUIel-input标签与input文件上传标签相结合的方式;
  • wtLoading为UI框架的el-button按钮loading加载状态。

样式代码:

// 上传按钮样式布局
.uploadBtn {
    
    
		display: block;
		height: 100%;
		width: 100%;
		position: relative;
		overflow: hidden;
	}

.uploadBtn>input[type="file"] {
    
    
		width: 100%;
		opacity: 0;
		cursor: pointer;
		position: absolute;
		top: 0;
		right: 0;
		bottom: 0;
		left: 0;
}

实现代码【 vue 】:

// 方式一:基于vue
uploadImg(file) {
    
    
	// 采用formData格式
	let fd = new FormData();
	fd.append("imgData", file);
	this.$axios
		.post("图片上传api", fd)
		.then(res => {
    
    
			let data = res.data;
			if (data.code == "1") {
    
    
				// 返回生成的图片ID
				this.imgGid = data.imgGid;
				// 拼接图片Id,获取绝对地址
				this.imageUrl = this.pic + data.imgGid;
				console.log('上传成功!')
			} else {
    
    
				console.log('上传失败!')
			}
		});
}

布局代码二:

在这里插入图片描述

  • 基于【 JavaScript 】
  • 借助jQueryform表单提交实现二进制流文件上传;
  • 上传的过程中会动态加载一张loading.gif动态图,当图片上传完成或者上传失败时候移除loading图。

实现代码【 JavaScript 】:

const saveReport = function() {
    
    
	/* jQuery.form表单提交数据 */
	$('#addImg').ajaxSubmit({
    
    
		type: 'post',
		url: '上传接口api',
		data: {
    
    
			picType: 'jpg' // 图片格式
		},
		dataType: 'json',
		success: function(res) {
    
    
			if (res.code == 1) {
    
    
				/* 生成的图片ID */
				avatars = res.imgGid;
				/* 拼接回显图片 */
				$('#upJPG').prepend('<img src="' + res.imgGid + '" class="imgStyle" />');
				/* 删除图片 */
				$('.close').on('click', function(e) {
    
    
					/* 阻止图片跳转 */
					e.stopPropagation();
					/* 对dom的操作 */
				});
			}
		},
		error: function(err) {
    
    
			hintCard('网络错误');
		}
	});
	/* 防止表单自己再次提交,并跳转页面 */
	return false;
}

猜你喜欢

转载自blog.csdn.net/SK_21/article/details/109225714