View.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php namespace Upload\Lib;
  2. use Dever;
  3. class View
  4. {
  5. private $config = [
  6. 1 => 'Local',
  7. 2 => 'Qiniu',
  8. 3 => 'Oss',
  9. ];
  10. # 获取源文件信息
  11. public function getSource($file, $url = false)
  12. {
  13. $path = parse_url($file, PHP_URL_PATH);
  14. $filename = basename($path);
  15. $parts = explode('_', $filename);
  16. $pureName = $parts[0];
  17. $pureName = pathinfo($pureName, PATHINFO_FILENAME);
  18. $info = Dever::db('upload/file')->find(['name' => $pureName]);
  19. if ($url) {
  20. $file = Dever::load(\Upload\Lib\View::class)->getUrl($info);
  21. return $file;
  22. }
  23. return $info;
  24. }
  25. public function getUrl($info, $project = 'api')
  26. {
  27. if (strstr($info['file'], 'http')) {
  28. return $info['file'];
  29. }
  30. $save = Dever::load(\Upload\Lib\Util::class)->getSaveInfo($info['save_id'], $project);
  31. //$save = Dever::db('upload/save')->find($info['save_id']);
  32. if (isset($save['setting']['host']) && $save['setting']['host']) {
  33. $host = $save['setting']['host'];
  34. if (strstr($host, '{host}')) {
  35. $host = str_replace('{host}', Dever::host(), $host);
  36. }
  37. } else {
  38. $host = Dever::host() . 'data/' . DEVER_PROJECT . '/upload/';
  39. }
  40. return $host . $info['file'];
  41. }
  42. public function local($file, $convert = false)
  43. {
  44. if (strstr($file, '?')) {
  45. $temp = explode('?', $file);
  46. $file = $temp[0];
  47. }
  48. $base = Dever::data();
  49. $host = Dever::host() . 'data/';
  50. if (strstr($file, $host)) {
  51. $local = str_replace($host, $base, $file);
  52. } else {
  53. $local = Dever::file('tmp/' . md5($file));
  54. file_put_contents($local, file_get_contents($file), LOCK_EX);
  55. }
  56. if ($convert) {
  57. if (strstr($base, '/www/') && !strstr($base, 'wwwroot')) {
  58. $local = str_replace('/www/', '/data/dm/container/web/', $local);
  59. }
  60. }
  61. return $local;
  62. }
  63. public function http($file)
  64. {
  65. $base = Dever::data();
  66. $host = Dever::host() . 'data/';
  67. if (strstr($file, $base)) {
  68. return str_replace($base, $host, $file);
  69. } else {
  70. $local = Dever::file('tmp/' . md5($file));
  71. file_put_contents($local, file_get_contents($file), LOCK_EX);
  72. return str_replace($base, $host, $local);
  73. }
  74. }
  75. # 从内容中解析文件
  76. public function file($content, $domain, $local = false)
  77. {
  78. $content = preg_replace_callback('/[0-9a-zA-Z\-\\/]+(\.jpeg|\.jpg|\.png|\.gif|\.mp3|\.mp4|\.aov|\.m4a)/i', function($matches) use($domain, $local)
  79. {
  80. $file = $matches[0];
  81. $file = ltrim($file, '/');
  82. if (!strstr($file, 'http')) {
  83. $file = $domain . $file;
  84. }
  85. if ($local) {
  86. $upload = Dever::load(Save::class)->act($local, $file);
  87. if ($upload && isset($upload['url'])) {
  88. $file = $upload['url'];
  89. }
  90. }
  91. return $file;
  92. }, $content);
  93. return $content;
  94. }
  95. }