View.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. public function getUrl($info)
  11. {
  12. if (strstr($info['file'], 'http')) {
  13. return $info['file'];
  14. }
  15. $save = Dever::db('save', 'upload')->find($info['save_id']);
  16. if ($save['host']) {
  17. $host = $save['host'];
  18. if (strstr($host, '{host}')) {
  19. $host = str_replace('{host}', Dever::host(), $host);
  20. }
  21. } else {
  22. $host = Dever::host() . 'data/' . DEVER_PROJECT . '/upload/';
  23. }
  24. return $host . $info['file'];
  25. }
  26. public function local($file)
  27. {
  28. $host = Dever::host() . 'data/';
  29. if (strstr($file, $host)) {
  30. return str_replace($host, Dever::data(), $file);
  31. } else {
  32. $local = Dever::file('tmp/' . md5($file));
  33. file_put_contents($local, file_get_contents($file), LOCK_EX);
  34. return $local;
  35. }
  36. }
  37. public function http($file)
  38. {
  39. $base = Dever::data();
  40. $host = Dever::host() . 'data/';
  41. if (strstr($file, $base)) {
  42. return str_replace($base, $host, $file);
  43. } else {
  44. $local = Dever::file('tmp/' . md5($file));
  45. file_put_contents($local, file_get_contents($file), LOCK_EX);
  46. return str_replace($base, $host, $local);
  47. }
  48. }
  49. # 从内容中解析文件
  50. public function file($content, $domain, $local = false)
  51. {
  52. $content = preg_replace_callback('/[0-9a-zA-Z\-\\/]+(\.jpeg|\.jpg|\.png|\.gif|\.mp3|\.mp4|\.aov|\.m4a)/i', function($matches) use($domain, $local)
  53. {
  54. $file = $matches[0];
  55. $file = ltrim($file, '/');
  56. if (!strstr($file, 'http')) {
  57. $file = $domain . $file;
  58. }
  59. if ($local) {
  60. $upload = Dever::load('save', 'upload')->act($local, $file);
  61. if ($upload && isset($upload['url'])) {
  62. $file = $upload['url'];
  63. }
  64. }
  65. return $file;
  66. }, $content);
  67. return $content;
  68. }
  69. }