路过的夏季 2024-03-29 14:44 采纳率: 82.4%
浏览 8
已结题

laravel admin上传文件自动变成zip后缀的解决办法

laravel admin上传文件变成zip后缀了
在使用php laravel admin上传图片正常,但是上传file 文件时,回自动把文件后缀改为 .zip,有知道是怎么回事吗?
又遇到过得吗?怎背面解决

    public function upload(): View|JsonResponse
    {
        if ($this->isDemo) return $this->error('演示环境下不允许修改');
        if (request()->method() != 'POST') return $this->error();
        $type         = request()->input('type', '');
        $data         = [
            'upload_type' => request()->post('upload_type', ''),
            'file'        => request()->file($type == 'editor' ? 'upload' : 'file'),
        ];
        $uploadConfig = sysconfig('upload');
        empty($data['upload_type']) && $data['upload_type'] = $uploadConfig['upload_type'];
        $rules     = [
            'upload_type' => ['required', Rule::in(explode(',', $uploadConfig['upload_allow_type']))],
            'file'        => 'required',
        ];
        $validator = Validator::make($data, $rules, [
            'upload_type' => '指定上传类型有误',
            'file'        => '文件不能为空',
        ]);
        if ($validator->fails()) {
            return $this->error($validator->errors()->first());
        }
        $file = $type == 'editor' ? request()->upload : request()->file;
        var_dump($file->extension());
        die;
        if (!in_array($file->extension(), explode(',', $uploadConfig['upload_allow_ext']))) {
            return $this->error('上传文件类型不在允许范围');
        }
        if ($file->getSize() > $uploadConfig['upload_allow_size']) {
            return $this->error('文件大小超过预设值');
        }
        $upload_type = $uploadConfig['upload_type'];
        try {
            $upload = UploadService::instance()->setConfig($uploadConfig)->$upload_type($file, $type);
        } catch (\Exception $e) {
            return $this->error($e->getMessage());
        }
        $code = $upload['code'] ?? 0;
        if ($code == 0) {
            return $this->error($upload['data'] ?? '');
        } else {
            return $type == 'editor' ? json(
                [
                    'error'    => ['message' => '上传成功', 'number' => 201,],
                    'fileName' => '',
                    'uploaded' => 1,
                    'url'      => $upload['data']['url'] ?? '',
                ]
            ) : $this->success('上传成功', $upload['data'] ?? '');
        }
    }

   var_dump($file->extension());
    die;

打印文件后缀为zip,而不是我上传的真正文件格式

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-29 14:44
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这个问题可能是因为在上传时没有正确设置文件的 MIME 类型导致的,也可能是因为 Laravel 的文件验证规则导致的。 解决方法如下:
    1. 确认 MIME 类型是否正确 在上传文件时,Laravel 会尝试根据文件的扩展名来猜测 MIME 类型。如果猜测错误,Laravel 会将文件类型更改为不正确的类型。 解决此问题的方法是在上传文件时指定 MIME 类型。这可以通过调用文件对象的 getMimeType() 方法来实现,如下所示: $file = $request->file('file'); $mime = $file->getMimeType(); 然后将 MIME 类型作为第二个参数传递给 store() 方法,如下所示: $path = $file->store('path/to/save', $mime); 这将确保文件的正确 MIME 类型在存储时被设置。
    2. 检查 Laravel 的文件验证规则 如果问题并非由 MIME 类型引起,那么问题可能与 Laravel 的文件验证规则有关。在您的代码样例中,文件验证规则如下所示: $rules = [ 'upload_type' => ['required', Rule::in(explode(',', $uploadConfig['upload_allow_type']))], 'file' => 'required', ]; $validator = Validator::make($data, $rules, [ 'upload_type' => '指定上传类型有误', 'file' => '文件不能为空', ]); 请确保这些规则与您的要求相符。如果您希望允许用户上传任何文件类型,请确保 upload_allow_type 配置中包含“*”通配符,例如: $config = [ 'upload_allow_type' => 'image/,application/,text/,/*', ]; 如果您想要限制上传的文件类型,请在 upload_allow_type 中指定允许的 MIME 类型。例如: $config = [ 'upload_allow_type' => 'image/jpeg,application/pdf', ]; 请注意,这些示例只是提供了一些可能的解决方案。如果您无法解决问题,请提供更多的代码和上下文,以便我们能够更好地理解您的问题。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月1日
  • 已采纳回答 4月1日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表