file()); if (!$file || !$file->isValid()) { return $this->fail('未找到文件'); } $data = $this->base($request, '/upload/files/' . date('Ymd')); return json([ 'link' => $data['url'], ]); } function upload(Request $request): Response { $file = current($request->file()); if (!$file || !$file->isValid()) { return $this->fail('未找到文件'); } $data = $this->base($request, '/upload/files/' . date('Ymd')); //cp($data); return $this->json(0, '上传成功', [ 'url' => $data['realpath'], 'name' => $data['name'], 'fullurl' => $data['url'], 'size' => $data['size'], ]); } /** * 获取上传数据 * @param Request $request * @param $relative_dir * @return array * @throws \Exception */ protected function base(Request $request, $relative_dir): array { // 适配器 local默认是存储在runtime目录下 public默认是存储在public目录下 // 可访问的静态文件建议public // 默认适配器是local //Storage::adapter('public'); $relative_dir = ltrim($relative_dir, '\\/'); $file = current($request->file()); try { if (!$file || !$file->isValid()) { throw new \support\exception\BusinessException('未找到上传文件', 400); } $ext = $file->getUploadExtension() ?: null; $mime_type = $file->getUploadMimeType(); $file_name = $file->getUploadName(); $file_size = $file->getSize(); if (!$ext && $file_name === 'blob') { [$___image, $ext] = explode('/', $mime_type); unset($___image); } $ext = strtolower($ext); $ext_forbidden_map = ['php', 'php3', 'php5', 'css', 'js', 'html', 'htm', 'asp', 'jsp']; if (in_array($ext, $ext_forbidden_map)) { throw new \support\exception\BusinessException('不支持该格式的文件上传', 400); } $mimetype = explode(',',Config('site.mimetype')); $result = Storage::adapter('public') ->path($relative_dir) ->size(1024 * 1024 * 5) ->extYes($mimetype) //->extNo(['image/png']) ->upload($file); } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } // cp($result); // stdClass Object // ( // [adapter] => public // [origin_name] => OIP-C (1).jpg // [file_name] => upload/files/20250527/eb14c1bfe6e7a22415bbbb30dfe90ba1_6834f0974db76.jpg // [storage_key] => eb14c1bfe6e7a22415bbbb30dfe90ba1_6834f0974db76 // [file_url] => //luru.oss-ap-southeast-1.aliyuncs.com/upload/files/20250527/eb14c1bfe6e7a22415bbbb30dfe90ba1_6834f0974db76.jpg // [size] => 15370 // [mime_type] => image/jpeg // [extension] => jpg // [file_height] => 474 // [file_width] => 474 // ) return [ 'code' => 0, 'url' => $result->file_url, 'name' => $result->origin_name, 'realpath' => '/'.$result->file_name, 'size' => $result->size, 'mime_type' => $result->mime_type, 'image_with' => $result->file_width, 'image_height' => $result->file_height, 'ext' => $result->extension, ]; } }