php 文件上传至OSS及删除远程阿里云OSS文件

今天给大家介绍php 文件上传至OSS及删除远程阿里云OSS文件的方法,在删除文件的时候大家记住千万不要带域名,具体操作示例参考下本文。

删除的时候记住不要带域名,也不要带'/'这个路径符号,如全路径是:'https://hxty.oss-cn-beijing.aliyuncs.com/data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf',则这里的path_file路径为:'data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf'。

  1. <?php
  2. include './aliyun-oss-php-sdk-2.4.2/autoload.php';
  3. use OSS\OssClient;
  4. use OSS\Core\OssException;
  5. error_reporting(E_ALL);
  6. ini_set('display_errors', 1); //错误信息
  7. ini_set('display_startup_errors', 1); //php启动错误信息
  8. session_start();
  9. /**
  10. * 取小数点后两位
  11. * @param type $str 带小数的数字
  12. * @return type 返回准确截取两位的小数
  13. */
  14. function num_format($str) {
  15. if (strpos($str, '.') === false) {
  16. return $str;
  17. }
  18. $retArr = explode(".", $str);
  19. $strs = substr($retArr[1], 0, 2);
  20. return $retArr[0] . "." . $strs;
  21. }
  22. function create_folders($dir) {
  23. return is_dir($dir) or ( create_folders(dirname($dir)) and mkdir(iconv("UTF-8", "GBK", $dir), 0777, true));
  24. }
  25. $file = $_FILES['file'];
  26. $accessKeyId = '';//RAM alioss后台能拿到
  27. $accessKeySecret = '';//RAM alioss后台能拿到
  28. $endpoint = 'oss-cn-beijing.aliyuncs.com';//alioss后台 概览可以拿到
  29. $bucket = 'planet-cross';//创建的组,随便吧创建,权限正常就行
  30. echo '<pre>';
  31. var_dump($_SESSION);
  32. if ($file) {
  33. $filename = "/upload/image/" . date("Ymd");
  34. if (!file_exists("." . $filename)) {
  35. create_folders("." . $filename);
  36. }
  37. //获取后缀
  38. $ary = explode('.', $file['name']);
  39. $su = end($ary);
  40. //文件名
  41. $filenames = $filename . "/" . time() . rand(1, 10000) . "." . $su;
  42. move_uploaded_file($file['tmp_name'], "." . $filenames);
  43. $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
  44. $filenames = ltrim($filenames, '/'); //去除 第一个 '/'
  45. // 开始上传
  46. $pic = $filenames;
  47. try {
  48. $oss = $ossClient->uploadFile($bucket, $pic, $filenames);
  49. $filenames = $oss['info']['url'];
  50. $_SESSION['file']=$filenames;
  51. echo $filenames;
  52. echo '<img src="' . $filenames . '" />';
  53. //删除本地文件
  54. } catch (\OSS\Core\OssException $e) {
  55. die("Failed to upload file ");
  56. return false;
  57. }
  58. } else if(!emptyempty($_SESSION['file'])){
  59. try {
  60. $patch=trim(parse_url($_SESSION['file'])['path'],'/');
  61. $ossClient = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
  62. $oss=$ossClient->deleteObject($bucket,$patch);
  63. $_SESSION['file']=null;
  64. } catch (OssException $e) {
  65. printf(__FUNCTION__ . ": FAILED\n");
  66. printf($e->getMessage() . "\n");
  67. return;
  68. }
  69. }
  70. /**
  71. * 删除文件
  72. * 可以删除调用ajaxfile上传的文件
  73. * @param type $path_file 文件路径
  74. * 删除的时候记住不要带域名 也不要带 / 这个路径符号
  75. */
  76. function delfile($path_file) {
  77. if (config('config.OSS_OPEN')) {
  78. try {
  79. // 删除的时候记住不要带域名,也不要带'/'这个路径符号,如全路径是:'https://hxty.oss-cn-beijing.aliyuncs.com/data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf',则这里的path_file路径为:'data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf'。
  80. $path_file=trim(parse_url($path_file)['path'],'/');//去掉域名,
  81. $ossClient = new \OSS\OssClient(config('config.OSS_KEY'), config('config.OSS_SECRET'), config('config.OSS_ENDPOINT'));
  82. $ossClient->deleteObject(config('config.OSS_BUCKET'), $path_file);
  83. } catch (OssException $e) {
  84. printf(__FUNCTION__ . ": FAILED\n");
  85. printf($e->getMessage() . "\n");
  86. return;
  87. }
  88. } else {
  89. $val2 = "." . $path_file;
  90. if (file_exists($val2)) {
  91. $unlinkfilename = trim($path_file, "/");
  92. unlink($unlinkfilename);
  93. }
  94. }
  95. }

删除的时候记住不要带域名,也不要带'/'这个路径符号,如全路径是:'https://hxty.oss-cn-beijing.aliyuncs.com/data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf',则这里的path_file路径为:'data/pdf/contract/2021-06-16/HXSHB21061611594482340c.pdf'。