php laravel 幀 該文件上傳

好,我認可個人忠告.php

今天laravel框架編寫一個文件上傳部分.總能找到不正確的路徑.可是,終於攻克.laravel

如下我分享一下本身的學習體會吧.算法

clientwindows

<form method="POST" action="" enctype="multipart/form-data">緩存

    <input type="file" name="myfile" />php7

    <input type="submit" name="submit" value="Submit" />app

</form>框架

提交到server端.函數

$file = Input::file('myfile');學習

if($file -> isValid()){

    //檢驗一下上傳的文件是否有效.

    $clientName = $file -> getClientOriginalName();//客戶端文件名..

    $tmpName = $file ->getFileName();//緩存在tmp目錄中的文件名稱好比php8933.tmp 這樣的類型的.

   $realPath = $file -> getRealPath();    //這個表示的是緩存在tmp目錄下的文件的絕對路徑

   //好比個人是:G:\xampp\tmp\php5A69.tmp

  //這裏要注意,假設我使用接下來的move方法以後, getRealPath() 就找不到文件的路徑了.因爲文件已經被移走了.

   因此這裏道出了文件上傳的原理,將文件上傳的某個暫時文件夾中,而後使用Php的函數將文件移動到指定的文件夾.

  $entension = $file -> getClientOriginalExtension(); //上傳文件的後綴.

    $mimeTye = file -> getMimeType();//你們對mimeType應該不陌生了. 我獲得的結果是 image/jpeg.

   //這裏要注意一點,曾經咱們使用mime_content_type(),在php5.3 以後,開始使用 fileinfo 來獲取文件的mime類型.因此要增長 php_fileinfo的php拓展.windows下是 php_fileinfo.dll,在php.ini文件裏將 extension=php_fileinfo.dll前面的分號去掉就能夠.固然要從新啓動server.

  最後咱們使用

  $path = $file -> move('storage/uploads');

  假設你這樣寫的話,默認是會放置在 咱們 public/storage/uploads/php79DB.tmp  

  貌似不是咱們但願的,假設咱們但願將其放置在app的storage文件夾下的uploads文件夾中,並且需要更名的話..

  $path = $file -> move(app_path().'/storage/uploads',$newName);

  這裏app_path()就是app目錄所在的路徑.$newName 可以是你經過某種算法得到的文件的名稱.主要是不能反覆產生衝突就能夠.  比方 $newName = md5(date('ymdhis').$clientName).".".$extension;

  利用日期和client文件名稱結合 使用md5 算法加密獲得結果.不要忘記在後面加上文件原始的拓展名.

  好吧.開始原本想敲代碼的,現在搞成這幅德行了..

  Best Wishes.

}

相關文章
相關標籤/搜索