上传图片oss_基于阿里OSS图片上传总结

本文总结了基于阿里OSS的图片与视频上传步骤,包括后台管理系统和手机端的实现方法,强调了上传过程中需要注意的细节,如文件引入、表单元素设置、JS处理以及可能出现的错误和解决方案。
摘要由CSDN通过智能技术生成

1e1b09402ce18f4ef88f9aae8e71a098.png

【摘要】本文主要是对图片上传做一下汇总以及注意事项(以公司项目为例)。本文描述的是在OSS为基础的前提下,对图片上传问题的总结, 随着技术细分的明显, 图文服务器、数据库服务器、应用服务器三者分离是最基础要求,因此我们这里做一个小总结。

【作者】 小明

1、后台管理系统的上传方法

1)首先需要在当前页面引入以下文件

<script type="text/javascript" src="res/js/common/ui/jquery.form.js"></script>
<script type="text/javascript" src="res/js/core/crypto.js"></script>
<script type="text/javascript" src="res/js/core/hmac.js"></script>
<script type="text/javascript" src="res/js/core/sha1.js"></script>
<script type="text/javascript" src="res/js/core/base64.js"></script>

2)在弹窗文件内的form里面使用

<div class="ms-item-box left">
    <label class="ms-item-label">上传图片<i>(要求:150*150)</i></label>
    <div class="ms-item-text">
        <div class="ms-item-upload">
            <div class="ms-upload-box">
                <span class="ms-upload-text"><i class="iconfont">&#xe600;</i>选择图片</span>
                <div class="ms-upload-alpha"></div>
                <span class="ms-upload-button">更换图片</span>
                <input type="file" name="goods_main_image_file" class="ms-upload-file" _width="228" _height="150" value="{{goods_main_image_file}}" upload="{{id_public_goods_info}}" level="1" error="请选择图片!"/>
                <input type="hidden" name="goods_main_image" value="{{goods_main_image}}" warp="goods_main_image_file"/>
            </div>
            <span class="iconfont ms-upload-close"></span>
            <i class="iconfont mt-loading-icon mt-rotate-load ms-upload-loading">&#xe62f;</i>
        </div>
    </div>
</div>

这里需要注意:

<input type="file" name="goods_main_image_file(别名:当前页面的js文件会用到)" class="ms-upload-file" _width="228" _height="150" value="{{goods_main_image_file(别名:当前页面的js文件会用到)}}" upload="{{id_public_goods_info(单条数据的ID)}}" level="1" error="请选择图片!"/>

<input type="hidden" name="goods_main_image(数据库字段)" value="{{goods_main_image(数据库字段)}}" warp="goods_main_image_file(别名:当前页面的js文件会用到)"/>

3)在当前页面对应的js文件 submitDialog 里边需要添加:

self.data.goods_main_image_file = 0

goods_main_image_file与上边出现的相对应

4)在当前页面对应的js文件 dialogCallback 里边需要添加:

this.tool.setImage(M(self.input.goods_main_image).prev()[0],self.data.goods_main_image,self.content);

goods_main_image数据库字段

上传视频的方法:

1)在当前页面对应的js文件 dialogCallback 里边需要添加:

var video = document.getElementById('video-change');
if(video){
	M('.ms-upload-video').bind('change', {context:that}, that.uploadVideo1);
	if(self.data.mid_table_remark_014 !== ''){
		M('#video-change').parent().parent().parent().addClass('complete');
		that.deleteVideo();
		M('#video-change').text('更换视频');
		console.log(self.data.mid_table_remark_014);
		M('.goods_main_image_box')[0].href=self.data.mid_table_remark_014
	}
}

mid_table_remark_014:视频地址

goods_main_image_box:点击查看的链接

2)在dialogCallback同级下加入以下代码

uploadVideo1:function(e) {
	var that = e.data.context;
	that.uploadIng=true
	var target = this;
	var box = M(target).parent().parent();
	that.name = target.files[0].name;
	if(!target.files.length){
		return;
	};
	box.removeClass('complete').addClass('load');
	that.videoProgress1(target,box);
	M('.ms-upload-video').unbind('click');
},
deleteVideo:function() {
	M('.ms-upload-close.video').bind('click',function(){
		M.ui.confirm.init({
			title:'系统提示',
			html:'确定要删除吗?',
			position:'absolute',
			button:[
				{
					html:'确认',
					callback:function(){
						M('.ms-item-upload.video').removeClass('complete');
						M('.ms-upload-video').next().val('');
						$('#video-change').text('上传视频');
					}
				}
			]
		});	
	});
},
videoProgress1:function(target,box){
	var that = this;
	M.ui.upload.init({
		element:target,
		context:this,
		that:this.tool,
		type:'vnd',
		callback:function(url,ops){
			M.ui.waiting.creat({
				status:true,
				text:'上传成功',
				time:1000,
				callback:function(self){
					var el=M(ops.element).next()[0];
					el.value=url;
					//$('#video-change').text('上传成功');
					M(target).parent().find('ms-upload-text').find('span').text('上传成功');
					box.addClass('complete').removeClass('load');
					box.find('.ms-upload-text').find('span').html('点击更换')
					that.deleteVideo();
					//M(target).siblings('input').val()
					//M('input[name=goods_main_image_child_0]').val()
					box.parents('.ms-item-box').find('a')[0].href =M(target).siblings('input').val()
					that.uploadIng=false
					//box.siblings('a')[0].href =M(target).siblings('input').val()
					//M('.goods_main_image_box')[0].href = M('input[name=goods_main_image_child_0]').val()
				}
			})
		},
		progress:function(percent) {
			var circle = M('#circle');
			if(target.getAttribute('data-id')==1){
				circle = M('#circle1');
			}
			circle.attr('stroke-dasharray', percent * 1.88 +' 188.4')
		}
	});	
},

3)需要在上传的位置添加

<div class="ms-item-box left" style="width: 300px">
    <label class="ms-item-label">录播上传</label>
    <div class="ms-item-text">
        <div class="ms-item-upload video left mar-right-20">
            <div class="ms-upload-box">
                <span class="ms-upload-text"><i class="img"></i><span id="video-change">点击上传</span></span>
                <div class="ms-upload-alpha"></div>
                <svg width="140" height="90" class="svg">
                    <circle cx="70" cy="45" r="30" stroke-width="4" stroke="#D1D3D7" fill="none"></circle>
                    <circle cx="70" cy="45" id="circle" r="30" stroke-width="4" stroke="#00A5E0" fill="none" stroke-dasharray="0 189" ></circle>
                </svg>
                <input type="file" name="mid_table_remark_014_0" class="ms-upload-video" _width="228" _height="150" value="{{mid_table_remark_014_0}}" upload="{{id_public_goods_info}}"  data-id='2'/>
                <input type="hidden" name="mid_table_remark_014" value="{{mid_table_remark_014}}" warp="mid_table_remark_014_0" class="hide"/>
            </div>
            <span class="iconfont ms-upload-close video"></span>
        </div>
    </div>
    <div> <a target="_blank" style="cursor: pointer" class="goods_main_image_box">点击查看视频</a></div>
</div>

1、手机端的上传方法

<input type="file" id="weichat_img">
;(function(M){
	M.define('user_edit',{
		node:{},
		data:{
			signature:{expire:0}
		},
		init:function(options){
			this.creat();
		},		
		creat:function() {
			this.node.upload = M('#weichat_img');
			this.addEvent();
		},
		addEvent:function() {
			this.node.upload.on('change', {context:this}, this.uploadFile);
		},
		uploadFile:function(e) {
			var that = e.data.context;
			var target = this;
			var box = M('.preview-img-wrap');
			var reader = new FileReader();
			if(!target.files.length){
				return;
			};
			reader.readAsDataURL(target.files[0]);
			reader.onload = function() {
				M.ui.upload.init({
					element:target,
					context:this,
					that:that,
					callback:function(url,ops){
						console.log(url)
					}
				});	
			}
		}
	}).ready(function(){
		M.ui.rotate.init(function(){
			M.use.init(['form','crypto','hmac','sha1','base64'],function(){
				M.user_edit.init();
			});
		})
	});
})(window.jQuery||window.Zepto||window.xQuery);

特别注意:

a32bbdaac096d72b25958dc8d4f2b080.png

如果还不可以,那就去config.js文件里面看一下这个位置有没有这些

8158ef8c81e29388905f8acda639820e.png

仍然不可以的话,去对应的路径找一下这些文件看有没有

附:这种方法也可以上传视频

常见错误:

  1. 传入了后端不必要的文件路径内容: C:file_image1.jpg的内容
  2. Json没有用引号扩起来,导致后端报错

欢迎关注 技术团队的知乎账号 我们凭团队实例运作以下专栏, 必须干货!

互联网创业专栏 (我们小伙伴的创业历程)

与您一起聊技术 (APP、微信公众号、小程序、H5 技术总结)

互联网产品研发管理 (我们公司对产品结构的管理思路)

产品君的案例库(产品小伙伴深刻总结)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件和交互功能。要实现在 Element-UI 中上传图片阿里OSS,可以按照以下步骤进行: 1. 安装依赖:首先,需要安装 `ali-oss` 和 `element-ui` 的相关依赖。可以使用 npm 或者 yarn 进行安装。 2. 配置阿里OSS:在阿里OSS 控制台创建一个 Bucket,并获取 AccessKeyId、AccessKeySecret、Bucket 名称和 Endpoint。 3. 创建上传组件:在 Vue 组件中,使用 Element-UI 的 `el-upload` 组件来实现图片上传功能。可以设置 `action` 属性为阿里OSS 的上传地址,`before-upload` 属性来处理上传前的逻辑。 4. 在上传前进行签名:在 `before-upload` 方法中,需要通过阿里OSS 的 SDK 进行签名操作,生成上传所需的参数。可以使用 `ali-oss` 库提供的 `put` 方法来进行签名。 5. 上传图片:在签名成功后,调用 `put` 方法将图片上传阿里OSS。可以设置 `on-success` 属性来处理上传成功后的逻辑。 下面是一个简单的示例代码: ```vue <template> <el-upload action="https://your-bucket-name.oss-cn-hangzhou.aliyuncs.com" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess" > <el-button>点击上传</el-button> </el-upload> </template> <script> import OSS from 'ali-oss'; export default { methods: { async handleBeforeUpload(file) { const client = new OSS({ region: 'your-region', accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', }); try { const result = await client.put(file.name, file); // 在这里可以处理上传成功后的逻辑 } catch (error) { // 处理上传失败的逻辑 } // 返回 false 可以阻止上传 return false; }, handleUploadSuccess(response) { // 处理上传成功后的逻辑 }, }, }; </script> ``` 请注意,上述代码中的 `your-region`、`your-access-key-id`、`your-access-key-secret` 和 `your-bucket-name` 需要替换为你自己的阿里OSS 相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值