AliyunOss.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. *
  4. *User:Administrator
  5. *Date:2021/10/10
  6. */
  7. namespace app\common\lib\upload;
  8. use app\api\exception\ApiException;
  9. use OSS\Core\OssException;
  10. use OSS\OssClient;
  11. class AliyunOss
  12. {
  13. public function Upload(){
  14. $name = $_FILES['file']['name'];//1.png
  15. $tmp_name = $_FILES['file']['tmp_name'];//C:\Users\Administrator\AppData\Local\Temp\phpD08.tmp
  16. $error = $_FILES['file']['error'];
  17. //过滤错误(临时测试时使用,代码写的比较简陋)
  18. if ($error) {
  19. switch ($error) {
  20. case 1 :
  21. $error_message = '您上传的文件超过了PHP.INI配置文件中UPLOAD_MAX-FILESIZE的大小';
  22. break;
  23. case 2 :
  24. $error_message = '您上传的文件超过了PHP.INI配置文件中的post_max_size的大小';
  25. break;
  26. case 3 :
  27. $error_message = '文件只被部分上传';
  28. break;
  29. case 4 :
  30. $error_message = '文件不能为空';
  31. break;
  32. default :
  33. $error_message = '未知错误';
  34. }
  35. die($error_message);
  36. }
  37. //文件名生成
  38. $arr_name = explode('.', $name);// [0 => "1" , 1 => "png"]
  39. //源文件的后缀
  40. $extension = end($arr_name); //png
  41. /**
  42. * 判断上传文件是否合法
  43. * 判断截取上传文件名是否为
  44. * jpeg,jpg,png其中之一
  45. */
  46. if (!in_array($extension, array("jpeg", "jpg", "png", "PNG", "JPG", "JPEG","pdf","PDF","XLS","xls","doc","DOC","docx","xlsx"))) {
  47. return show(-2, '上传文件不合法');
  48. }
  49. // try {
  50. // validate(['file' => ['fileSize:2*1024*1024']])->check(['file' => $file]);
  51. // } catch (ValidateException $e) {
  52. // $return['msg'] = $e->getMessage();
  53. //
  54. // }
  55. //新的文件名
  56. $new_name = $name;//1.png
  57. //文件在OSS上的URL
  58. $url=config('upload.aliyun_oss_save_path_syjc').$new_name;
  59. //抛出异常
  60. try{
  61. //相比传统的操作,其实就多了两个步骤
  62. //第一步是根据上面的参数实例化一个对象
  63. $ossClient = new OssClient(
  64. config('upload.aliyun_oss_accessKeyId_syjc'),
  65. config('upload.aliyun_oss_accessKeySecret_syjc'),
  66. config('upload.aliyun_oss_endpoint_syjc')
  67. );
  68. //这一步相当于之前把临时文件移入到设置的地址那步,只是以前的是自己的服务器上,现在是OSS;
  69. $result =$ossClient->uploadFile(config('upload.aliyun_oss_bucket_syjc'),$url,$tmp_name);
  70. //返回的参数
  71. if (isset($result['info']['http_code']) AND $result['info']['http_code']==200) {
  72. $arr=[
  73. 'fileName' => $new_name,
  74. 'fileUrl' => $result['info']['url']
  75. ];
  76. return showSuccess($arr);
  77. }else{
  78. return show('3', '上传失败');
  79. }
  80. } catch(OssException $e) {
  81. return config($e->getCode(), $e->getMessage());
  82. }
  83. }
  84. }