• php版蜻蜓精简版系统-修复本地上传功能,本地上传视频存储功能,之前一直使用阿里云和腾讯云,本地出错


    php版蜻蜓精简版系统-修复本地上传功能,本地上传视频存储功能,之前一直使用阿里云和腾讯云,本地出错

    修改以下几部分,并且必须安装ffmpg插件,修改部分是

     app/Services/UploadFilesService.php

      @@ -173,13 +173,13 @@ class UploadFilesService {
    173 173 if ($type == 'video') {
    174 174 // 本地环境生成预览图
    175 175 $img = 'uploads/' . genRequestSn() . '.jpg';
    176   $path = [
    177   'ffmpeg.binaries' => '/usr/local/bin/avconv',
    178   'ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
    179   'ffprobe.binaries' => '/usr/local/bin/avprobe',
    180   'ffprobe.binaries' => '/usr/local/bin/ffprobe',
    181   ];
    182   $ffmpeg = FFMpeg::create($path);
      176 $logger = null;
      177 $ffmpeg = FFMpeg::create(array(
      178 'ffmpeg.binaries' => '/usr/ffmpeg/bin/ffmpeg',
      179 'ffprobe.binaries' => '/usr/ffmpeg/bin/ffprobe',
      180 'timeout' => 3600, // The timeout for the underlying process
      181 'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
      182 ), $logger);
    183 183 $video = $ffmpeg->open($filePath);
    184 184 $frame = $video->frame(TimeCode::fromSeconds(1));
    185 185 $frame->save($img);
     

     app/Services/UploadFilesService.php

      @@ -12,6 +12,7 @@ use Exception;
    12 12 use AppModelsConfig;
    13 13 use IlluminateHttpRequest;
    14 14 use IlluminateSupportFacadesFile;
      15 use IlluminateSupportFacadesStorage;
    15 16 use QiniuAuth;
    16 17 use QiniuStorageUploadManager;
    17 18 use OSSOssClient;
      @@ -165,8 +166,8 @@ class UploadFilesService {
    165 166 $path = 'uploads/' . date('Ymd') . '/';
    166 167 File::makeDirectory($path,$mode = 0777,true,true);
    167 168 // 使用uploads本地存款控件(目录)
    168   $img = app('image')->make($filePath)->resize(800, 800)->save($path . $filename);
    169   $url = $img->basePath();
      169 $bool = Storage::disk($path)->put($filename, file_get_contents($filePath));
      170 $url = $path . $filename;
    170 171 if ($type == 'video') {
    171 172 return [
    172 173 'img' => '',
     

     app/Services/UploadFilesService.php

      @@ -163,11 +163,10 @@ class UploadFilesService {
    163 163  
    164 164 public function local_upload($filename, $filePath, $type = 'img')
    165 165 {
    166   $path = 'uploads/' . date('Ymd') . '/';
    167   File::makeDirectory($path,$mode = 0777,true,true);
      166 $filename = date('Ymd') . '/' . $filename;
    168 167 // 使用uploads本地存款控件(目录)
    169   $bool = Storage::disk($path)->put($filename, file_get_contents($filePath));
    170   $url = $path . $filename;
      168 $bool = Storage::disk('uploads')->put($filename, file_get_contents($filePath));
      169 $url = 'uploads/' . $filename;
    171 170 if ($type == 'video') {
    172 171 return [
    173 172 'img' => '',
     

     app/Services/UploadFilesService.php

      @@ -165,20 +165,24 @@ class UploadFilesService {
    165 165 {
    166 166 $filename = date('Ymd') . '/' . $filename;
    167 167 // 使用uploads本地存款控件(目录)
    168   $bool = Storage::disk('uploads')->put($filename, file_get_contents($filePath));
    169   $url = 'uploads/' . $filename;
    170   if ($type == 'video') {
    171   return [
    172   'img' => '',
    173   'img_url' => '',
    174   'video_url' => $url,
    175   'url' => dealUrl($url),
    176   ];
    177   } else {
    178   return [
    179   'img_url' => $url,
    180   'url' => dealUrl($url)
    181   ];
      168 $bool = Storage::disk('local')->put($filename, file_get_contents($filePath));
      169 if($bool){
      170 $url = 'uploads/' . $filename;
      171 if ($type == 'video') {
      172 return [
      173 'img' => '',
      174 'img_url' => '',
      175 'video_url' => $url,
      176 'url' => dealUrl($url),
      177 ];
      178 } else {
      179 return [
      180 'img_url' => $url,
      181 'url' => dealUrl($url)
      182 ];
      183 }
      184 }else{
      185 throw new Exception('上传失败');
    182 186 }
    183 187 }
    184 188 } 直接替换本文件 ,使用最终文件。
    
     

    <?php

    /**

    * 文件上传服务

    * @date 2020-01-01

    * @author kiro

    * @version 1.0

    */

    namespace AppServices;

    use Exception;

    use AppModelsConfig;

    use FFMpegCoordinateTimeCode;

    use FFMpegFFMpeg;

    use IlluminateHttpRequest;

    use IlluminateSupportFacadesFile;

    use IlluminateSupportFacadesStorage;

    use QiniuAuth;

    use QiniuStorageUploadManager;

    use OSSOssClient;

    use OSSCoreOssException;

    class UploadFilesService {

    private $config = [];

    public function __construct()

    {

    $this->config = Config::getConfig('upload');

    if (empty($this->config)){

    throw new Exception('上传配置错误');

    }

    }

    public function up(Request $request)

    {

    if (!$request->hasFile('file')) {

    throw new Exception('无法获取上传文件');

    }

    $file = $request->file('file');

    if (!$file->isValid()) {

    throw new Exception('文件未通过验证');

    }

    // 2.是否符合文件类型 getClientOriginalExtension 获得文件后缀名

    $fileExtension = strtolower($file->getClientOriginalExtension());

    if(! in_array($fileExtension, explode('|', $this->config['upload_file_ext']))) {

    throw new Exception('不支持' .$fileExtension. '文件格式');

    }

    // 3.判断大小是否符合 2M

    $filePath = $file->getRealPath();

    if (filesize($filePath) >= $this->config['upload_max_size'] * 1024 * 1000) {

    throw new Exception('文件大小超过限制');

    }

    $filename = genRequestSn() . '.' . $fileExtension;

    // 文件原名

    $originaName = $file->getClientOriginalName();

    if ($this->config['upload_service'] == 'qiniu') {

    $data = $this->qiniu_upload($filename, $filePath);

    } elseif ($this->config['upload_service'] == 'aliyun') {

    $data = $this->aliyun_upload($filename, $filePath);

    } else {

    $data = $this->local_upload($filename, $filePath);

    }

    $data['name'] = $originaName;

    return $data;

    }

    public function upVideo(Request $request)

    {

    if (!$request->hasFile('file')) {

    throw new Exception('无法获取上传文件');

    }

    $file = $request->file('file');

    if (!$file->isValid()) {

    throw new Exception('文件未通过验证');

    }

    // 2.是否符合文件类型 getClientOriginalExtension 获得文件后缀名

    $fileExtension = strtolower($file->getClientOriginalExtension());

    if(! in_array($fileExtension, explode('|', $this->config['upload_video_file_ext']))) {

    throw new Exception('不支持' .$fileExtension. '文件格式');

    }

    // 3.判断大小是否符合 2M

    $filePath = $file->getRealPath();

    if (filesize($filePath) >= $this->config['upload_video_max_size'] * 1024 * 1000) {

    throw new Exception('文件大小超过限制');

    }

    $filename = genRequestSn() . '.' . $fileExtension;

    // 文件原名

    $originaName = $file->getClientOriginalName();

    if ($this->config['upload_service'] == 'qiniu') {

    $data = $this->qiniu_upload($filename, $filePath, 'video');

    } elseif ($this->config['upload_service'] == 'aliyun') {

    $data = $this->aliyun_upload($filename, $filePath, 'video');

    } else {

    $data = $this->local_upload($filename, $filePath, 'video');

    }

    $data['name'] = $originaName;

    return $data;

    }

    public function qiniu_upload($filename, $filePath, $type = 'img')

    {

    $accessKey = $this->config['upload_qiniu_accessKey'];

    $secretKey = $this->config['upload_qiniu_secretKey'];

    $bucket = $this->config['upload_qiniu_bucket'];

    if (empty($accessKey) || empty($secretKey) || empty($bucket)) {

    throw new Exception('七牛云配置有误');

    }

    $auth = new Auth($accessKey, $secretKey);

    $token = $auth->uploadToken($bucket);

    $uploadMgr = new UploadManager();

    $filename = 'qiniu_' . $filename;

    $result = $uploadMgr->putFile($token, $filename, $filePath);

    unlink($filePath);

    $url = isset($result[0]['key']) ? $result[0]['key']:'';

    if ($type == 'video') {

    $img = $url . $this->config['upload_qiniu_video_thumb'];

    return [

    'img' => $img,

    'img_url' => dealUrl($img),

    'video_url' => $url,

    'url' => dealUrl($url),

    ];

    } else {

    return [

    'img_url' => $url . '?imageView2/1/w/800/h/800',

    'url' => dealUrl($url)

    ];

    }

    }

    public function aliyun_upload($filename, $filePath, $type = 'img')

    {

    $accessKey = $this->config['upload_aliyun_accessKey'];

    $secretKey = $this->config['upload_aliyun_secretKey'];

    $bucket = $this->config['upload_aliyun_bucket'];

    $endpoint = $this->config['upload_aliyun_endPoint'];

    if (empty($accessKey) || empty($secretKey) || empty($bucket)) {

    throw new Exception('阿里云配置有误');

    }

    try{

    $filename = 'aliyun_' . $filename;

    $ossClient = new OssClient($accessKey, $secretKey, $endpoint);

    $ossClient->uploadFile($bucket, $filename, $filePath);

    } catch(OssException $e) {

    throw new Exception($e->getMessage());

    }

    unlink($filePath);

    $url = $filename;

    if ($type == 'video') {

    $img = $url . $this->config['upload_aliyun_video_thumb'];

    return [

    'img' => $img,

    'img_url' => dealUrl($img),

    'video_url' => $url,

    'url' => dealUrl($url),

    ];

    } else {

    return [

    'img_url' => $url,

    'url' => dealUrl($url)

    ];

    }

    }

    public function local_upload($filename, $filePath, $type = 'img')

    {

    $filename = date('Ymd') . '/' . $filename;

    // 使用uploads本地存款控件(目录)

    $bool = Storage::disk('local')->put($filename, file_get_contents($filePath));

    if($bool){

    $url = 'uploads/' . $filename;

    if ($type == 'video') {

    // 本地环境生成预览图

    $img = 'uploads/' . genRequestSn() . '.jpg';

    $logger = null;

    $ffmpeg = FFMpeg::create(array(

    'ffmpeg.binaries' => '/usr/ffmpeg/bin/ffmpeg',

    'ffprobe.binaries' => '/usr/ffmpeg/bin/ffprobe',

    'timeout' => 3600, // The timeout for the underlying process

    'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use

    ), $logger);

    $video = $ffmpeg->open($filePath);

    $frame = $video->frame(TimeCode::fromSeconds(1));

    $frame->save($img);

    return [

    'img' => $img,

    'img_url' => dealUrl($img),

    'video_url' => $url,

    'url' => dealUrl($url),

    ];

    } else {

    return [

    'img_url' => $url,

    'url' => dealUrl($url)

    ];

    }

    }else{

    throw new Exception('上传失败');

    }

    }

    }

  • 相关阅读:
    AE 线编辑
    ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码
    AE二次开发技巧之撤销、重做
    ArcEngine数据编辑--选择要素
    java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
    MVC开发模式详解
    数据库设计中常见表结构的设计技巧
    Eclipse 保存文件时自动格式化代码
    优化你的java代码性能
    Hibernate 与mybatis的区别
  • 原文地址:https://www.cnblogs.com/yangqiangche/p/13547113.html
Copyright © 2020-2023  润新知