<?php namespace App\Traits\FileUploads; use Illuminate\Http\Request; class FileUploadsHelper { public function uploadVideo($file, $folder, $file_prefix, $max_width = false) { // 构建存储的文件夹规则,值如:uploads/images/video/201709/21/ // 文件夹切割能让查找效率更高。 $folder_name = "uploads/$folder/" . date("Y/m/d", time()); // 文件具体存储的物理路径,`public_path()` 获取的是 `public` 文件夹的物理路径。 // 值如:/home/vagrant/Code/changan/public/uploads/video/201709/21/ $upload_path = public_path() . '/' . $folder_name; // 获取文件的后缀名,因视屏上传时后缀名为空,所以此处确保后缀一直存在 $extension = strtolower($file->getClientOriginalExtension()) ?: 'mp4'; // 拼接文件名,加前缀是为了增加辨析度,前缀可以是相关数据模型的 ID // 值如:1_1493521050_7BVc9v.mp4 $filename = $file_prefix . '_' . time() . '_' . str_random(10) . '.' . $extension; // 将视频移动到我们的目标存储路径中 $file->move($upload_path, $filename); return [ 'path' => "/$folder_name/$filename", 'path_block' => localUrl("/$folder_name/$filename") ]; } }
请求规则:
<?php namespace App\Http\Requests\Admin; use App\Http\Requests\FormRequest; class VideoRequest extends FormRequest { /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'video' => 'required|mimes:avi,wmv,mpeg,mp4, mov, mkv, flv, f4v, m4v, rmvb, rm, 3gp, dat, ts, mts, vob', ]; } }
控制器:
<?php namespace App\Http\Controllers\Api\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\VideoRequest; use App\Traits\FileUploads\FileUploadsHelper; class VideoController extends Controller { /** * 上传视频 * * @param VideoRequest $request * @param FileUploadsHelper $handler * @return array */ public function store(VideoRequest $request, FileUploadsHelper $handler ) { $result = $handler->uploadVideo($request->video, 'video' ,"video"); return $result; } }