客戶端 php
<form method="POST" action="" enctype="muitipart/form-data"> 算法
<input type="file" name="myfile" /> windows
<input type="submit" name="submit" value="Submit" /> 緩存
</form> 服務器
提交到服務器端. php7
$file = Input::file('myfile'); app
if($file -> isValid()){ 函數
//檢驗一下上傳的文件是否有效. ui
$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前面的分號去掉便可.固然要重啓服務器.
最後咱們使用
$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;
利用日期和客戶端文件名結合 使用md5 算法加密獲得結果.不要忘記在後面加上文件原始的拓展名.