使用jquery、Vue 文件图片上传到阿里云OSS

工作中经常会遇到,捏个谁谁谁在前端把图片传到服务器,然后把key发给我。。。我:emmmmmmm~~~~~!很想回怼回去,但是看到大佬们 ‘倔强’ 的眼神,还是怂了下来,诺诺的说一句‘嗯’!

好了闲话不多说,下面给大家写了两种方法利用jquery和Vue把要传的文件传送到阿里云OSS上。

一、jquery

<input type="file" onchange="ossUpload(this)"/>
<script type="text/javascript" src="lib/crypto1/crypto/crypto.js"></script>
<script type="text/javascript" src="lib/crypto1/hmac/hmac.js"></script>
<script type="text/javascript" src="lib/crypto1/sha1/sha1.js"></script>
<script type="text/javascript" src="lib/base64.js"></script>
<script src="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js"></script>
<script>
	ossUpload = function (e){
	console.log(e)
	console.log($(e).get(0).files[0])
	let file = $(e).get(0).files[0]
	/**公司的K */
	let accessid = '';
	let accesskey = '';
	let host = '';//自己公司的OSS 地址
	var policyText = {
		"expiration": "2020-01-01T12:00:00.000Z", //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
		"conditions": [
			["content-length-range", 0, 1048576000] // 设置上传文件的大小限制
		]
	};
	var policyBase64 = Base64.encode(JSON.stringify(policyText))
	var message = policyBase64
	var bytes = Crypto.HMAC(Crypto.SHA1, message, accesskey, {
		asBytes: true
	});
	var signature = Crypto.util.bytesToBase64(bytes);
	var g_object_name = '可以自定义名字' + file.type.split('/')[1]
	console.log(g_object_name)
	var callbackbody = console.log
	// return false;
	//组装发送数据
	var request = new FormData();
	request.append("OSSAccessKeyId", accessid); //Bucket 拥有者的Access Key Id。
	request.append("policy", policyBase64); //policy规定了请求的表单域的合法性
	request.append("Signature", signature); //根据Access Key Secret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性
	//---以上都是阿里的认证策略 
	request.append("key", g_object_name); //文件名字,可设置路径
	request.append("success_action_status", '200'); // 让服务端返回200,不然,默认会返回204
	request.append('file', file); //需要上传的文件 file  
	request.append("callback", callbackbody); //回调,非必选,可以在policy中自定义
	$.ajax({
		url: host, //上传阿里地址
		data: request,
		processData: false, //默认true,设置为 false,不需要进行序列化处理
		cache: false, //设置为false将不会从浏览器缓存中加载请求信息
		async: false, //发送同步请求
		contentType: false, //避免服务器不能正常解析文件---------具体的可以查下这些参数的含义
		dataType: 'xml', //不涉及跨域  写json即可
		type: 'post',
		success: function(callbackHost, request) { //callbackHost:success,request中就是 回调的一些信息,包括状态码什么的 
		    console.log(arguments)
            var name = $this.attr("name");
            $this.closest("li").append("<span class='img-span'><img src=" + host + "/" +get_uploaded_object_name(file.name) +//">"); //动态向页面添加上传图片
            alert("图片上传成功!")
		},
		error: function(returndata) {
			console.log(arguments)
			alert("上传图片出错", false);
		}
	});
	}
</script>

里面的标注很全,看不懂的小伙伴欢迎评论!

二、Vue

let file = e.target.files[0],
        that = this;
      /**公司的K */
      let accessid = "";
      let accesskey = "";
      let host = "";//自己公司的OSS地址
      var policyText = {
        expiration: "2020-01-01T12:00:00.000Z", //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
        conditions: [
          ["content-length-range", 0, 1048576000] // 设置上传文件的大小限制
        ]
      };
      var policyBase64 = Base64.encode(JSON.stringify(policyText));
      var message = policyBase64;
      var bytes = Crypto.HMAC(Crypto.SHA1, message, accesskey, {
        asBytes: true
      });
      var signature = Crypto.util.bytesToBase64(bytes);
      var g_object_name = '自定义名称'+file.type.split("/")[1];
      // console.log(g_object_name);
      var callbackbody = console.log;
      // return false;
      //组装发送数据
      var request = new FormData();
      request.append("OSSAccessKeyId", accessid); //Bucket 拥有者的Access Key Id。
      request.append("policy", policyBase64); //policy规定了请求的表单域的合法性
      request.append("Signature", signature); //根据Access Key Secret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性
      //---以上都是阿里的认证策略
      request.append("key", g_object_name); //文件名字,可设置路径
      request.append("success_action_status", "200"); // 让服务端返回200,不然,默认会返回204
      request.append("file", file); //需要上传的文件 file
      request.append("callback", callbackbody); //回调,非必选,可以在policy中自定义
      let config = { headers: { "Content-Type": "multipart/form-data" } };
      that.$axios.post(host, request, config).then(function(response) {
        if (response.status === 200 || response.request.status == 200) {
          that.$message.success("图片上传成功!");
        } else {
          that.$message.error("图片上传失败!");
        }
});

备注还算清晰吧!不懂的小伙伴可以留言评论!

引入的JS文件https://download.csdn.net/download/jensen_yao/10850150

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定、组件化开发和虚拟DOM等特性,使得开发者可以更高效地构建交互式的Web应用程序。 要在Vue3中实现上传图片到阿里云OSS,你可以按照以下步骤进行操作: 1. 安装依赖:首先,你需要安装阿里云OSS的JavaScript SDK。可以使用npm或yarn命令来安装,例如: ``` npm install ali-oss ``` 2. 配置OSS客户端:在Vue3的代码中,你需要创建一个OSS客户端实例,并配置相关参数,如AccessKeyId、AccessKeySecret、Endpoint等。这些参数可以在阿里云OSS控制台中获取。 3. 创建上传组件:在Vue3中,你可以创建一个上传组件,用于选择图片文件并触发上传操作。可以使用`<input type="file">`元素来实现文件选择功能,并监听其`change`事件。 4. 上传图片:在上传组件中,你可以编写上传图片的逻辑。当用户选择了图片文件后,你可以通过OSS客户端调用`put`方法来上传图片文件阿里云OSS。 下面是一个简单的示例代码,演示了如何在Vue3中上传图片到阿里云OSS: ```javascript <template> <div> <input type="file" @change="handleFileChange"> </div> </template> <script> import OSS from 'ali-oss'; export default { methods: { handleFileChange(event) { const file = event.target.files[0]; const client = new OSS({ accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', region: 'your-oss-region', // 其他配置参数... }); // 生成唯一的文件名 const fileName = Date.now() + '-' + file.name; // 调用OSS客户端的put方法上传文件 client.put(fileName, file).then(response => { console.log('上传成功', response); // 在这里可以处理上传成功后的逻辑 }).catch(error => { console.error('上传失败', error); // 在这里可以处理上传失败后的逻辑 }); } } } </script> ``` 请注意,上述代码中的`your-access-key-id`、`your-access-key-secret`、`your-bucket-name`和`your-oss-region`需要替换为你自己的阿里云OSS相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值