阿里云OSS使用方法

本文介绍了如何使用PHP实现阿里云OSS服务的文件上传功能,包括图片和非图片文件的处理,以及检查文件是否存在和更新的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
require_once dirname(realpath(__FILE__)).DIRECTORY_SEPARATOR.'Aliyunoss'.DIRECTORY_SEPARATOR.'sdk.class.php';


class AliossResponse {
/**
* 上传本地文件到云服务器上
* sunjunfeng 2015-07-04
* 返回参数
*/
static public function uploadFile($file_path){
$oss_sdk_service = new ALIOSS(null,null,C('DEFAULT_OSS_INTERNAL_HOST'));

//设置是否打开curl调试模式
//$oss_sdk_service->set_debug_mode(FALSE);

//设置开启三级域名,三级域名需要注意,域名不支持一些特殊符号,所以在创建bucket的时候若想使用三级域名,最好不要使用特殊字符
$oss_sdk_service->set_enable_domain_style(TRUE);
$bucket = OSS_BUCKET;
//$filePrefix = 'market/';//为了满足新的阿里云OSS地址,需要去掉这个目录
$filePrefix = '';

try {
$suffix = strtolower(pathinfo($file_path,PATHINFO_EXTENSION));
if ($suffix == 'jpg'  || $suffix == 'gif' || $suffix == 'png' || $suffix == 'jpeg'){
$imagesize = getimagesize($file_path);
$file_name = md5_file($file_path).'_'.$imagesize[0].'x'.$imagesize[1].'.'.$suffix;
$objectname = $filePrefix.'image/'.substr($file_name, 0,2).'/'.$file_name;
$relativeobjectname = 'image/'.substr($file_name, 0,2).'/'.$file_name;

// 判断aliyunOss是否存在该文件(文件已做MD5)
$decideFilename = C('RES_UPDATE_URL').'image/'.substr($file_name, 0,2).'/'.$file_name;
if (self::netFileExists($decideFilename) ){
$header['etag'] = md5_file($file_path);
$header['x-oss-request-url'] = $decideFilename;
}else {
$response = $oss_sdk_service->upload_file_by_file($bucket, $objectname, $file_path);
$header = $response->header;
$header['x-oss-request-url'] = C('RES_UPDATE_URL').$relativeobjectname;
}
$header['oss_relative_url'] = $relativeobjectname;
$header['oss_response_image_w'] = $imagesize[0];
$header['oss_response_image_h'] = $imagesize[1];
}else {
$file_name = md5_file($file_path).'.'.$suffix;
$objectname = $filePrefix.'apk/'.substr($file_name, 0,2).'/'.$file_name;
$relativeobjectname = 'apk/'.substr($file_name, 0,2).'/'.$file_name;

// 判断aliyunOss是否存在该文件(文件已做MD5)
$decideFilename = C('RES_UPDATE_URL').'apk/'.substr($file_name, 0,2).'/'.$file_name;
if (self::netFileExists($decideFilename)){
$header['etag'] = md5_file($file_path);
$header['x-oss-request-url'] = $decideFilename;
}else {
$response = $oss_sdk_service->upload_file_by_file($bucket, $objectname, $file_path);
$header = $response->header;
$header['etag'] = md5_file($file_path);
}
$header['oss_relative_url'] = $relativeobjectname;
}
$header['oss_response_status'] = 1;
$header['oss_response_message'] = 'OK';
return $header;
}catch (Exception $ex){
$return = array();
$return['oss_response_status'] = 100;
$return['oss_response_message'] = $ex->getMessage();
return $return;
}

}

//判断外网文件是否存在并且大小不为0
public function netFileExists($decideFilename){
$urlHeader = get_headers($decideFilename, 1);
if (strpos($urlHeader[0], '200') && (int)$urlHeader['Content-Length'] != 0){
return true;
}else {
return false;
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值