Fileoper.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: sicilon_IT
  5. * Date: 2020/1/5
  6. * Time: 9:49
  7. */
  8. namespace app\api\controller;
  9. use think\Controller;
  10. use think\Log;
  11. use think\Request;
  12. class Fileoper extends Controller
  13. {
  14. private function filterfiletype($usefile = "file")
  15. {
  16. $filetype = $_FILES[$usefile]['type'];
  17. $types = [
  18. 'image',
  19. 'excel',
  20. ];
  21. $filetypeuse = "*" . $filetype;
  22. $iscanupload = false;
  23. foreach ($types as $key => $value) {
  24. if (strpos($filetypeuse, $value)) {
  25. $iscanupload = true;
  26. }
  27. }
  28. if (!$iscanupload) {
  29. log::info($_FILES);
  30. $msg = "file type error: " . $filetype;
  31. log::info($msg);
  32. $this->error($msg);
  33. }
  34. }
  35. /**
  36. * 指定文件位置上传
  37. *
  38. * @return void
  39. */
  40. public function uploadfilebydir()
  41. {
  42. //log::info($_FILES);
  43. $this->filterfiletype();
  44. // 获取表单上传文件
  45. $file = request()->file('file');
  46. if (empty($file)) {
  47. $this->error('请选择上传文件');
  48. }
  49. $defaultdir = 'Uploads' . '/';
  50. $dir = request()->param('dir') ? request()->param('dir') : request()->post('dir');
  51. $filename = request()->param('filename') ? request()->param('filename') : request()->post('filename');
  52. if ($dir) {
  53. if (!preg_match("/^[a-z0-9]{1,20}$/", $dir)) {
  54. $this->error('请求错误');
  55. }
  56. $dir = $defaultdir . $dir;
  57. } else {
  58. $dir = $defaultdir;
  59. }
  60. $domainpath = 'http://' . $_SERVER['HTTP_HOST'] . '/' . $dir . '/';
  61. // 移动到框架应用根目录/public/uploads/ 目录下
  62. if ($filename) {
  63. $info = $file->move(ROOT_PATH . 'public' . '/' . $dir, $filename);
  64. } else {
  65. $info = $file->move(ROOT_PATH . 'public' . '/' . $dir);
  66. }
  67. //如果不清楚文件上传的具体键名,可以直接打印$info来查看
  68. //获取文件(文件名),$info->getFilename() ***********不同之处,笔记笔记哦
  69. //获取文件(日期/文件名),$info->getSaveName() **********不同之处,笔记笔记哦
  70. $filename = $info->getSaveName(); //在测试的时候也可以直接打印文件名称来查看
  71. $filename = str_replace(DS, "/", $filename);
  72. if ($filename) {
  73. //$this->success('文件上传成功!');
  74. $imageUrl = $domainpath . $filename;
  75. $r_upload['code'] = '200';
  76. $r_upload['resultData'] = $imageUrl;
  77. //不转义反斜杠
  78. return json_encode($r_upload, 320);
  79. } else {
  80. // 上传失败获取错误信息
  81. $this->error($file->getError());
  82. }
  83. }
  84. }