You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.4 KiB

3 days ago
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\WechatUser;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
3 days ago
use Illuminate\Support\Facades\Storage;
use Throwable;
3 days ago
class H5UploadController extends Controller
{
public function store(Request $request): JsonResponse
{
$user = $request->user();
if (! $user instanceof WechatUser) {
abort(403, '仅微信用户可上传');
}
3 days ago
if (!$request->hasFile('file')) {
return response()->json(['message' => '未收到文件'], 422);
}
$uploaded = $request->file('file');
if (!$uploaded->isValid()) {
return response()->json(['message' => $uploaded->getErrorMessage()], 422);
}
3 days ago
$data = $request->validate([
'file' => ['required', 'file', 'max:5120', 'mimes:jpg,jpeg,png,gif,webp'],
]);
3 days ago
try {
$path = Storage::disk('public')->putFile('uploads/h5', $data['file']);
} catch (Throwable $e) {
report($e);
return response()->json(['message' => '文件保存失败'], 500);
}
if ($path === false) {
return response()->json(['message' => '文件保存失败'], 500);
}
$safePath = str_replace('\\', '/', $path);
3 days ago
return response()->json([
3 days ago
'url' => url('/storage/'.$safePath),
3 days ago
'path' => $path,
]);
}
}