aliyunupload图片上传_js使用阿里云oss上传图片

该博客介绍了如何使用JavaScript结合阿里云STS服务上传图片到OSS。首先展示了PHP代码来获取STS Token,然后在JS中使用此Token进行文件上传,并处理上传过程中的验证和错误。最后提到了阿里云后台的权限设置和跨域配置。
摘要由CSDN通过智能技术生成

header("Content-type:text/html;charset=utf-8");date_default_timezone_set("Asia/Shanghai");require_onceAPPPATH.'/vendor/sts-server/aliyun-php-sdk-core/Config.php';useSts\Request\V20150401asSts;classAliyunsts{public functiongetSTS(){$content=$this->read_file(APPPATH.'/vendor/sts-server/config.json');$myjsonarray=json_decode($content);$accessKeyID=$myjsonarray->AccessKeyID;$accessKeySecret=$myjsonarray->AccessKeySecret;$roleArn=$myjsonarray->RoleArn;$tokenExpire=$myjsonarray->TokenExpireTime;$policy=$this->read_file(APPPATH.'/vendor/sts-server/'.$myjsonarray->PolicyFile);$iClientProfile= DefaultProfile::getProfile("cn-hangzhou",$accessKeyID,$accessKeySecret);$client=newDefaultAcsClient($iClientProfile);$request=newSts\AssumeRoleRequest();$request->setRoleSessionName("client_name");$request->setRoleArn($roleArn);$request->setPolicy($policy);$request->setDurationSeconds($tokenExpire);$response=$client->doAction($request);$rows=array();$body=$response->getBody();$content=json_decode($body);$rows['status'] =$response->getStatus();if($response->getStatus() ==200){$rows['AccessKeyId'] =$content->Credentials->AccessKeyId;$rows['AccessKeySecret'] =$content->Credentials->AccessKeySecret;$rows['Expiration'] =$content->Credentials->Expiration;$rows['SecurityToken'] =$content->Credentials->SecurityToken;$rows['Endpoint'] =$myjsonarray->Endpoint;$rows['BucketName'] =$myjsonarray->BucketName;}else{$rows['AccessKeyId'] ="";$rows['AccessKeySecret'] ="";$rows['Expiration'] ="";$rows['SecurityToken'] ="";$rows['Endpoint'] ="";$rows['BucketName'] ="";}echojson_encode($rows);return;}public functionread_file($fname){$content='';if(!file_exists($fname)) {echo"The file$fnamedoes not exist\n";exit(0);}$handle=fopen($fname,"rb");while(!feof($handle)) {$content.=fread($handle,10000);}fclose($handle);return$content;}}

//js部分$(function(){

$(".uploadImg0").change(function(e){

varmubiao = $(this).attr("mubiao");

varfiles = this.files;

for(vari=0;i

letfile = files[i];

varsuffix = file.name.substr(file.name.lastIndexOf("."));

varfileTypes = '.png;.jpg;.jpeg;.gif;.bmp';

if(fileTypes.indexOf(suffix)==-1){

alert("只支持图片上传")

return;

}

//文件大小限制if(file.size>20*1024*1024){

alert("文件不得大于20M")

return;

}

varobj=Date.parse(newDate()); // 这里是生成文件名varrand = Math.random();

vardate = newDate();

varx = date.toLocaleString().split(' '); //获取日期与时间varstoreAs = 'wenjianjia/'+ x[0] +'/'+ obj + rand; //命名空间storeAs = storeAs.replace(".","") + suffix;

OSSupload(storeAs,file,mubiao);

}

});

functionOSSupload(newfiles, file,mubiao)

{

varrand = Math.random();

OSS.urllib.request("********/getSTS?t="+rand, {method: 'GET'}, (err, response) => {

if(err) {

return;

}

try{

result = JSON.parse(response);

} catch(e) {

returnalert('parse sts response info error: '+ e.message);

}

letclient = newOSS({

accessKeyId: result.AccessKeyId,

accessKeySecret: result.AccessKeySecret,

stsToken: result.SecurityToken,

endpoint: result.Endpoint,

bucket: result.BucketName,

});

//newfiles表示上传的object name , file表示上传的文件client.multipartUpload(newfiles, file, {

mime: 'image/jpeg',

progress: async function(p, checkpoint, resp) {

//console.log(p);}

}).then(function(result) {

if((result.res.status == 200) && (result.res.statusCode == 200) && (result.res.requestUrls)) {

varr = result.res.requestUrls[0];

varurl = r.split('?')[0];

;

} else{

alert("上传失败,请联系管理员:");

}

}).catch(function(err) {

console.log("错误");

console.log(err);

});

});

}

})

//阿里云后台设置子账户,分配各种权限,设置上传目录header权限,php后台设置跨域

header('Access-Control-Allow-Origin:*');// *代表允许任何网址请求header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE,PUT');// 允许请求的类型header('Access-Control-Allow-Credentials: true');// 设置是否允许发送 cookiesheader('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with,Origin');// 设置允许自定义请求头的字段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值