首页 > 其他分享 >hyperf文件上传和url函数

hyperf文件上传和url函数

时间:2024-04-29 22:12:20浏览次数:30  
标签:return filePath url request hyperf SEPARATOR DIRECTORY 上传

2024年4月29日11:24:35

配置静态资源
如果您希望 Swoole 来管理静态资源,请在 config/autoload/server.php 配置中增加以下配置。

return [
    'settings' => [
        ...
        // 静态资源
        'document_root' => BASE_PATH . '/public',
        'enable_static_handler' => true,
    ],
];

控制器

public function uploadFile()
    {
        $file = $this->request->file('file');

        try {
            if ($file == null) {
                throw new Exception('未找到上传文件');
            }
            $data = CommonService::uploadFile($file, ['xls', 'xlsx', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'zip', 'pptx', 'mp4', 'flv'], 'file');

            return $this->success($data, '上传成功');
        } catch (Throwable $e) {
            return $this->fail($e);
        }
    }

需要引入 "zx/php-tools": "^0.0.1"

use Hyperf\HttpMessage\Upload\UploadedFile;
use ZX\Tools\File\MimeTypes;

//全局通用文件上传组件
    public static function uploadFile(UploadedFile $uploadedFile, array $acceptExt, string $fileType = 'image')
    {
        $ext = $uploadedFile->getExtension();
        p($ext);

        if (!in_array($ext, $acceptExt)) {
            throw new Exception('文件名后缀不允许');
        }
        //图片检测安全
        if ($fileType == 'image') {
            $res = self::checkMimeType($uploadedFile, $ext);
            if ($res == false) {
                throw new Exception('文件安全检测未通过');
            }
        }

        $date = date('Ymd');
        $filePath = GlobalCode::UPLOAD_URL . DIRECTORY_SEPARATOR . $fileType . DIRECTORY_SEPARATOR . $date . DIRECTORY_SEPARATOR;
        $allDir = 'public' . DIRECTORY_SEPARATOR . $filePath;
        p($allDir);

        if (!is_dir($allDir)) {
            if (!mkdir($allDir, 0755, true)) {
                throw new Exception('创建文件夹失败');
            }
        }

        $fileName = getToken() . '.' . $ext;
        $finalPath = BASE_PATH . DIRECTORY_SEPARATOR . $allDir . DIRECTORY_SEPARATOR . $fileName;
        $showPath = $filePath . DIRECTORY_SEPARATOR . $fileName;

        $uploadedFile->moveTo($finalPath);
        /*
         * 注意windows下返回的地址可能会出现双斜杠,linux不会
         * windows:http://www.la.com/upload\\image\\20230626\\15d092d9058b7c3ac1952c79ede5b411.jpg
         * linux:http://www.la.com/upload/image/20230626/15d092d9058b7c3ac1952c79ede5b411.jpg
         */
//        return $filePath . $fileName;

        return ['id' => uniqid(), 'src' => $showPath, 'fileName' => $fileName];
    }

    //检测文件是否合法
    public static function checkMimeType(UploadedFile $uploadedFile, string $ext = '')
    {
        try {
            $filePath = $uploadedFile->getRealPath();
            p($uploadedFile->getRealPath());

            $fileMimeType = mime_content_type($filePath);
            p($fileMimeType);
            $mimeTypes = MimeTypes::getImage();
            $isExist = array_key_exists($fileMimeType, $mimeTypes);

            if (!$isExist) {
                throw new Exception('非允许mime types类型');
            }

            list($width, $height, $type, $attr) = getimagesize($filePath, $ext);
            if ($width <= 0 || $height <= 0) {
                return false;
            } else {
                return true;
            }

        } catch (Exception $e) {
            return false;
        }

    }

url辅助函数返回请求的文件的全url

方案一:
abstract class AbstractController
{
    #[Inject]
    protected ContainerInterface $container;

    #[Inject]
    protected RequestInterface $request;

    #[Inject]
    protected ResponseInterface $response;

    /**
     * 生成快捷URL
     * @param string $str
     * @return void
     */
    public function to(string $str = '')
    {
        $scheme = $this->request->getUri()->getScheme() ?? 'http';
        $host = $this->request->getUri()->getHost() ?? '127.0.0.1';
        $port = $this->request->getUri()->getPort() ?? config('server.servers.port', 9500);

        $url = "{$scheme}://{$host}:{$port}/{$str}";
        return $url;
    }
}

方案二:
if (!function_exists('to')) {
    //快捷生成路径
    function to(string $str = '')
    {
        $request = ApplicationContext::getContainer()->get(RequestInterface::class);

        $scheme = $request->getUri()->getScheme() ?? 'http';
        $host = $request->getUri()->getHost() ?? '127.0.0.1';
        $port = $request->getUri()->getPort() ?? config('server.servers.port', 9500);

        $url = "{$scheme}://{$host}:{$port}/{$str}";
        return $url;
    }

}

标签:return,filePath,url,request,hyperf,SEPARATOR,DIRECTORY,上传
From: https://www.cnblogs.com/zx-admin/p/18165310

相关文章

  • Markdown文件上传到博客图片处理
    Markdown文件上传到博客图片处理使用Dotnet-cnblog工具可以配合typora实现自动上传md文件里图片到博客园的图床,这样就不用自己一张张来上传Dotnet-cnblog安装使用1.配置NET环境net环境下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/5.0下载后安装NET环境,运行c......
  • url编码(百分号编码)
    https://blog.csdn.net/p312011150/article/details/78928003 通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不......
  • curl多请求脚本
    #!/bin/bash#定义请求URL和数据url="https://api-adservices.apple.com/api/v1"data=""output_file="requests_log.txt"#清空或创建输出文件>"$output_file"#函数用于发送POST请求并记录日志send_post_request(){localrequest_number=$1local......
  • AWS 文件预签名URL
     1.《获取STS临时授权凭证》2.《通过STS Token分片上传文件》一、相关文档1.AWS S3预签名URL文档:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/example_s3_Scenario_PresignedUrl_section.htmlAWS S3只针对文件的存储,若想实现阿里云oss通过URL参数对图......
  • vite 项目,背景图报错 The request url "xx/xx/xx.xx" is outside of Vite serving all
    版本vite3.2.6vue3.2.37 背景本地启项目,项目中引用了自研组件库(没有安装,通过文件路径直接引用,便于调试项目和组件),两者文件夹是平级的组件库中背景图:background:100%/100%no-repeaturl('../assets/svg/xxx.svg'); 问题本地启动项目之后,背景图未正常展示浏览器控......
  • PHP 使用CURL库IP欺骗,隐藏真实客户端IP
    首先搭建环境,建立个ip.php.代码如下:<?error_reporting(0);functionGetIP(){if($_SERVER['HTTP_CLIENT_IP']){$onlineip=$_SERVER['HTTP_CLIENT_IP'];}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){$onlineip=$_SERVER['HTTP_X_......
  • 通过AWS STS临时授权凭证分片上传文件
    一、相关文档1.AWS分片上传文档:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/mpuoverview.html2.获取AWS STS临时授权凭证,go示例二、GO示例packagemainimport("context""errors""fmt""github.com/aws/aws-sdk-go-v2/......
  • Go语言实现多协程文件上传,断点续传--demo
    packagemainimport("fmt""io""os""regexp""strconv""sync""github.com/qianlnk/pgbar")/***需求:1.多协程下载文件2.断点续连**/funcmain(){//获取要下载文件DownloadFileName:=&quo......
  • 通过fatsadmin阿里云OSS存储插件-生成二维码图片,并上传阿里云OSS存储空间里
    #生成二维码并上传到阿里云OSSif(!function_exists('create_qrcode')){functioncreate_qrcode($url){$filename=time().rand(100,999).'.png';$path='uploads/qrcode/'.$filename;$code=newQRcode();$......
  • curl wget 下载文件
    curl下载文件:curl-kOhttps://10.0.8.5:8888/chfs/shared/Application/360se13.1.6055.0.exe#下载远程服务器上的文件,需要定位到末端文件-k#忽略服务器ssl证书-O#保存文件至本地,并使用源文件名-ozhang.exe#使用自定义文件名zhang.exe保存......