1
0
Fork 0
main
panliang 2024-09-18 11:08:20 +08:00
parent 607384c912
commit 329b1af0c0
3 changed files with 58 additions and 6 deletions

View File

@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
class OssController extends BaseController
{
public function sign(Request $request)
{
// 账户要有 OSS bucket 的上传 putObject 权限
// OSS bucket 要开启跨域配置
// 阿里云 RAM access_key
$id = 'xxx';
// 阿里云 RAM access_secret
$key = 'xxx';
// OSS EndPoint, 完整域名
$host = 'https://owl-admin-starter.oss-cn-chengdu.aliyuncs.com';
// 访问域名, 推荐使用自定义域名
// 如果使用 EndPoint, 直接访问文件时, 会下载文件, 无法预览
$url = 'http://oss.abcdefg.fun';
// 文件上传目录, 以 / 结尾
$dir = $request->input('upload', 'upload/');
// 请求有效期(30秒), 超过时间将无法上传文件
$expire = 30;
$end = time() + $expire;
// 文件大小(1000MB), 超过将无法上传文件
$max = 1048576000;
$arr = [
'expiration' => str_replace('+00:00', '.000Z', gmdate('c', $end)),
'conditions' => [
['content-length-range', 0, $max],
['starts-with', '$key', $dir]
]
];
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$data = [
'accessid' => $id,
'host' => $host,
'policy' => $base64_policy,
'signature' => $signature,
'expire' => $end,
'dir' => $dir,
'url' => $url,
];
return $this->json($data);
}
}

View File

@ -1,6 +1,7 @@
<?php
use App\Http\Controllers\Api\KeywordController;
use App\Http\Controllers\Api\OssController;
use App\Http\Controllers\Api\WebController;
use Illuminate\Support\Facades\Route;
@ -8,3 +9,5 @@ Route::get('keyword', [KeywordController::class, 'index']);
Route::get('keyword/tree', [KeywordController::class, 'tree']);
Route::post('web/upload', [WebController::class, 'upload']);
Route::post('oss/sign', [OssController::class, 'sign']);

View File

@ -4,9 +4,6 @@ namespace Tests\Feature;
// use Illuminate\Foundation\Testing\RefreshDatabase;
use Faker\Generator;
use Illuminate\Container\Container;
use Illuminate\Support\Testing\Fakes\Fake;
use Tests\TestCase;
class ExampleTest extends TestCase
@ -16,8 +13,6 @@ class ExampleTest extends TestCase
*/
public function test_the_application_returns_a_successful_response(): void
{
$faker = Container::getInstance()->make(Generator::class);
dump($faker->name);
dump(now());
}
}