Skip to content

Commit 3d9395a

Browse files
committed
聊天模块增加视频上传
1 parent be9ed7a commit 3d9395a

2 files changed

Lines changed: 72 additions & 0 deletions

File tree

app/Controller/Laboratory/UploadController.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,38 @@ public function uploadFile()
117117
$uploadResult = UploadService::getInstance()->uploadFile($params['file'], $params['savePath'], $params['messageId']);
118118
return $this->success($uploadResult);
119119
}
120+
121+
/**
122+
* 上传文件
123+
* @RequestMapping(path="upload_video", methods="post")
124+
* @Middlewares({
125+
* @Middleware(RequestMiddleware::class),
126+
* })
127+
* @return \Psr\Http\Message\ResponseInterface
128+
* @throws \League\Flysystem\FileExistsException
129+
*/
130+
public function uploadVideo()
131+
{
132+
$params = [
133+
'savePath' => $this->request->input('savePath') ?? '',
134+
'file' => $this->request->file('file'),
135+
'messageId' => $this->request->input('messageId') ?? ''
136+
];
137+
//配置验证
138+
$rules = [
139+
'savePath' => 'required',
140+
'file' => 'required|file',
141+
'messageId' => 'required ',
142+
];
143+
$message = [
144+
'savePath.required' => '[savePath]缺失',
145+
'file.required' => '[file]缺失',
146+
'messageId.required' => '[messageId]缺失',
147+
'file.file' => '[file] 参数必须为文件类型',
148+
];
149+
$this->verifyParams($params, $rules, $message);
150+
151+
$uploadResult = UploadService::getInstance()->uploadVideo($params['file'], $params['savePath'], $params['messageId']);
152+
return $this->success($uploadResult);
153+
}
120154
}

app/Service/Laboratory/UploadService.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,42 @@ public function uploadFile(object $file, string $savePath = '', string $messageI
129129
'messageId' => $messageId,
130130
];
131131
}
132+
133+
/**
134+
* 上传视频文件
135+
* @param object $file
136+
* @param string $savePath
137+
* @param string $messageId
138+
* @return array
139+
* @throws \League\Flysystem\FileExistsException
140+
*/
141+
public function uploadVideo(object $file, string $savePath = '', string $messageId = '') : array
142+
{
143+
if ($file->getSize() > 20971520) $this->throwExp(UploadCode::ERR_UPLOAD_SIZE, '上传文件不能超过20M');
144+
//得到上传文件的后缀
145+
$fileExt = getExtByFile($file->getClientFilename());
146+
if (!in_array($fileExt, ['mp4', 'avi', 'mov', 'rmvb', 'flv', '3GP', 'FLV', 'WMV'])) $this->throwExp(UploadCode::ERR_UPLOAD_TYPE, '上传文件必须为视频文件');
147+
148+
//拼接得到文件名以及对应路径
149+
$fileName = md5(uniqid()) . '.' . $fileExt;
150+
$uploadPath = $savePath . '/' . $fileName;
151+
152+
//外网访问的路径
153+
$fileUrl = env('OSS_URL') . $uploadPath;
154+
155+
$stream = fopen($file->getRealPath(), 'r+');
156+
$this->filesystem->writeStream(
157+
$uploadPath,
158+
$stream
159+
);
160+
if (is_resource($stream)) {
161+
fclose($stream);
162+
}
163+
return [
164+
'fileName' => $fileName,
165+
'fileExt' => $fileExt,
166+
'url' => $fileUrl,
167+
'messageId' => $messageId,
168+
];
169+
}
132170
}

0 commit comments

Comments
 (0)