ホームページ  >  記事  >  PHPフレームワーク  >  Thinkphp5 が写真、オーディオ、ビデオ ファイルのアップロード機能を実装する方法

Thinkphp5 が写真、オーディオ、ビデオ ファイルのアップロード機能を実装する方法

藏色散人
藏色散人転載
2021-06-03 15:53:122939ブラウズ

以下は thinkphp フレームワーク チュートリアル コラムで、Thinkphp5 が写真、音声、動画ファイルのアップロード機能をどのように実装しているかを紹介します。必要!

1 つ目は同期アップロードです。最も基本的なアップロード方法は、フォーム送信をクリックした後にジャンプする方法です。

次のフロントエンド コード

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>上传文件</title>
</head>
<body>
  <form action="upload" enctype="multipart/form-data" method="post">
    <input type="file" name="image" />
    <br>
    <input type="submit" value="上传" />
  </form>
</body>
</html>

enctypeenctype="multipart/form-data" である必要があり、ソリューションは次のようにする必要があることに注意してください。ポストであること。

バックエンド コードについては、tp5 公式 Web サイトのサンプル コードを参照してください:

 public function upload(){
  // 获取表单上传文件 例如上传了001.jpg
  $file = request()->file(&#39;image&#39;);
  // 移动到框架应用根目录/public/uploads/ 目录下
  if($file){
    $info = $file->move(ROOT_PATH . &#39;public&#39; . DS . &#39;uploads&#39;);
    if($info){
      // 成功上传后 获取上传信息
      // 输出 jpg
      echo $info->getExtension();
      // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
      echo $info->getSaveName();
      // 输出 42a79759f284b767dfcb2a0197904287.jpg
      echo $info->getFilename();
    }else{
      // 上传失败获取错误信息
      echo $file->getError();
    }
  };
 }

後で、私がやったことは非常に単純であることがわかり、フロントエンド コードを改良しました。フロントエンド コードはファイル タイプの検証を実装しました。同期は Ajax 非同期送信に変更され、ファイル データは formdata に送信されました。バックグラウンド コードはあまり変更されず、ファイルを送信するためのリンクが返されましたが、フロントエンド コードは終了プレビューは画像のみをプレビューできました。変更されたフロントエンド コードは

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>上传文件</title>
</head>
<body>
  <form action="uploads1a" id="myform">
    <input type="file" name="image" id="file" />
  </form>
  <p id="test"></p>
  <button id="btn">点击上传</button>
  <p>
    <img src="" id="see">
  </p>
  <script type="text/javascript">
  var btn = document.getElementById("btn");
  var file=document.getElementById("file");
  var promise=["png","jpg","jpeg","gif","mp3","mp4","svg"];
  file.onchange=function(){
    var name=file.value;
    var ext=name.substring(name.lastIndexOf(".") + 1).toLowerCase();
    var res=promise.indexOf(ext);
    if (res<0) {
      alert("文件格式不正确");
      document.getElementById("btn").disabled=true;
    }else{
      document.getElementById("btn").disabled=false;
    }
  }
  btn.onclick = function() {
    var val=document.getElementById("file").value;
    if (val.length==0) {
      return;
    }
    var fromData = new FormData(document.forms[0]);
    fromData.append("test", "formdata");
    var oAjax = new XMLHttpRequest();
    oAjax.open(&#39;post&#39;, "uploadAjax", true);
    oAjax.send(fromData);
    oAjax.onreadystatechange = function() {
      if (oAjax.readyState == 4) {
        if (oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) {
          console.log(oAjax.responseText);
          var data=JSON.parse(oAjax.responseText);
          document.getElementById("see").setAttribute("src","/thinkphp"+data.src);
          document.getElementById("file").value="";
        } else {
          console.log(oAjax.status);
        }
      }
    };
  }
  </script>
</body>
</html>

です。バックエンド コードは、アップロードが処理されなかった後のエラー戻り情報など、詳細が

public function uploadAjax(){
    // 获取表单上传文件 例如上传了001.jpg
  $file = request()->file(&#39;image&#39;);
  $test=request()->post("test");
  $src=[];//返回文件路径
  // 移动到框架应用根目录/public/uploads/ 目录下
  if($file){
    $info = $file->move(ROOT_PATH . &#39;public&#39; . DS . &#39;uploads&#39;);
    if($info){
      // 成功上传后 获取上传信息
      // 输出 jpg
       $info->getExtension();
      // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
       $info->getSaveName();
      // 输出 42a79759f284b767dfcb2a0197904287.jpg
       $info->getFilename();
       $src["src"]=DS.&#39;public&#39;.DS.&#39;uploads&#39;.DS.$info->getSaveName();
    }else{
      // 上传失败获取错误信息
       $file->getError();
    }
  };
    return json_encode($src);
  }

に改善されました。

全体的な実装はこんな感じですが、一般的なビジネスシナリオとしては、アップロードしたファイルを削除したり、ファイルがアップロードされたかどうかを確認したりするなど、これ自体にはまだ改善の余地がたくさんあります。再度アップロードまたは削除されました 以前にアップロードされました。もちろん、ファイル名を加工せずに元の名前でアップロードすると、アップロード後に元のファイルは上書きされてしまいます。

関連する推奨事項: 最新の 10 件の thinkphp ビデオ チュートリアル

以上がThinkphp5 が写真、オーディオ、ビデオ ファイルのアップロード機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。