三种「包括 Oss」文件上传代码示例
前言
提供三种常见的文件上传代码示例,包括上传到服务器,上传到服务器后转到oss、直接上传到阿里云oss;
文件上传到服务器
public function upload(Request $request)
{
// 判断有没有文件
if ($request->hasFile('file')) {
$file = $request->file('file');
$data = array();
// custom_path是用户指定的文件夹,方便文件分类,如果不传默认归到snap文件夹中;
// 示例路径:upload/snap/2023/36/
$filepath='upload/' . ($request->custom_path??"snap") . '/' .date("Y"). '/'. $request->user()->company_id . '/';
$destinationPath = public_path(path);
// 如果目标目录不存在,则创建之
if (!file_exists($destinationPath)) {
mkdir($destinationPath, 0777, true);
}
// 文件名,这里是防止重复
// 示例: 1675929724 测试文件.pdf
$filename = time() . ' '.$file->getClientOriginalName();
// 存储文件类型
$data['contenttype'] = strtolower($file->getClientOriginalExtension()) ?: 'png';
// 获取字节大小
$data['filesize'] = $file->getSize();
// 保存文件到目标目录
try {
$file->move($destinationPath, $filename);
} catch (Exception $e) {
return $this->failed($e->getMessage() ?? '文件上传失败');
}
$data['filepath'] = $filepath.$filename;
return $this->success($data);
}
return $this->failed('未接受到需要上传的文件');
}
通过服务器上传到oss
public function upload(Request $request)
{
// 判断有没有文件
if ($request->hasFile('file')) {
// 获取文件
$file = $request->file('file');
// 填写 accessKeyId 也可以放到env中
$accessKeyId = "LTAI5t*********dFnt";
// 填写 accessKeySecret 也可以放到env中
$accessKeySecret = "m6Meu2j**********tw8kE";
// 填写 endpoint
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称,例如examplebucket。
$bucket = "examplebucket";
$object = 'upload/' .($request->custom_path??"snap").'/'.date('Y').'/'. $request->user()->company_id . '/' . time().' '.$file->getClientOriginalName();
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->uploadFile($bucket, $object, $file);
//存储文件类型
$data['contenttype'] = strtolower($file->getClientOriginalExtension()) ?: 'png';
//获取字节大小
$data['filesize'] = $file->getSize();
//获取文件路径
$data['filepath'] = $object;
return $this->success($data);
} catch(OssException $e) {
return $this->failed($e->getMessage());
}
}
return $this->failed('未接受到需要上传的文件');
}
通过签名方式上传到oss
https://jouzeyu.com/posts/158bdfdf-aef3-a468-2f0d-889bf49753ee/
e053d93d-5578-c3b5-60b1-8454b7b63b13
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。