View.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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, $convert = false)
  27. {
  28. if (strstr($file, '?')) {
  29. $temp = explode('?', $file);
  30. $file = $temp[0];
  31. }
  32. $base = Dever::data();
  33. $host = Dever::host() . 'data/';
  34. if (strstr($file, $host)) {
  35. $local = str_replace($host, $base, $file);
  36. } else {
  37. $local = Dever::file('tmp/' . md5($file));
  38. file_put_contents($local, file_get_contents($file), LOCK_EX);
  39. }
  40. if ($convert) {
  41. if (strstr($base, '/www/') && !strstr($base, 'wwwroot')) {
  42. $local = str_replace('/www/', '/data/dm/container/web/', $local);
  43. }
  44. }
  45. return $local;
  46. }
  47. public function http($file)
  48. {
  49. $base = Dever::data();
  50. $host = Dever::host() . 'data/';
  51. if (strstr($file, $base)) {
  52. return str_replace($base, $host, $file);
  53. } else {
  54. $local = Dever::file('tmp/' . md5($file));
  55. file_put_contents($local, file_get_contents($file), LOCK_EX);
  56. return str_replace($base, $host, $local);
  57. }
  58. }
  59. # 从内容中解析文件
  60. public function file($content, $domain, $local = false)
  61. {
  62. $content = preg_replace_callback('/[0-9a-zA-Z\-\\/]+(\.jpeg|\.jpg|\.png|\.gif|\.mp3|\.mp4|\.aov|\.m4a)/i', function($matches) use($domain, $local)
  63. {
  64. $file = $matches[0];
  65. $file = ltrim($file, '/');
  66. if (!strstr($file, 'http')) {
  67. $file = $domain . $file;
  68. }
  69. if ($local) {
  70. $upload = Dever::load('save', 'upload')->act($local, $file);
  71. if ($upload && isset($upload['url'])) {
  72. $file = $upload['url'];
  73. }
  74. }
  75. return $file;
  76. }, $content);
  77. return $content;
  78. }
  79. }