php上傳下載文件

以前作一個上傳下載的項目,發現網上的和本身需求不是很同樣,翻閱了下書籍和整理了下網上的一些代碼。作了一個上傳下載的demo,上傳經過php自己的uploadfile函數,並返回以時間戳命名的文件名後,把文件名插入到數據庫;下載則是把文件輸出給瀏覽器,讓瀏覽器來執行下載過程。
不一樣版本php語法可能不一樣,另外代碼可能會有冗餘的地方,若是有錯誤的地方或者有能夠改進的地方,請不吝賜教。php

下面附上代碼:html

upload.php(上傳文件代碼)注意要建upload(指定上傳目錄)文件夾mysql

 1 <?php require_once('Connections/connect.php');//數據庫鏈接文件
 2 session_start();//開啓session                              
 3 header("content-type:text/html;charset=gb2312");
 4     header("Content-Type:text/html;charset=utf8"); 
 5     header("Access-Control-Allow-Origin: *"); //解決跨域
 6     header('Access-Control-Allow-Methods:POST');// 響應類型  
 7     mysql_select_db("upload", $testupload); //選擇數據庫
 8     mysql_query("SET NAMES utf8");//解決中文亂碼問題
 9        $extension = end(explode(".", $_FILES["file"]["name"]));// 獲取文件後綴名
10                    
11     if ($_FILES["file"]["error"] > 0)  
12       {  
13       echo "錯誤: " . $_FILES["file"]["error"] . "<br />";  
14       }
15       /*//限制上傳文件類型及大小
16       elseif (!(($_FILES["file"]["type"]=="image/jpeg" || $_FILES["file"]["type"]=="image/png") && $_FILES["file"]["size"]<1024000)) {
17             echo "該文件不能被上傳!";
18         }*/ 
19            /*//判斷文件是否存在
20         elseif(file_exists($filename))
21         {
22             echo "該文件已存在!";
23         }*/  
24     else  
25       {  
26     $uid = $_SESSION['IDD'];//用戶ID
27     date_default_timezone_set("PRC");//設置時區
28     $date=date('Ymdhis');//獲取時間戳
29      $titles = $_POST['titles'];//獲取輸入標題
30      $author = $_SESSION['userss'];//獲取當前登陸用戶名用以返回上傳者信息
31     $info = $date;    //獲取前文時間戳賦值給info方便插入info字段
32      $confname = "$date";//獲取前文時間戳
33     $files='http://localhost/uploadtest/upload/'. $confname .'.'. $extension;  //獲取上傳文件地址:網址+文件名(時間戳+擴展名)
34     $filesname=$confname .'.'. $extension;//獲取文件名(時間戳重命名後的文件名)
35       
36     //插入數據到數據庫 
37     $strsql = "insert into upload (uid,titles,files,filesname,info,author) values('$uid','$titles','$files','$filesname','$info','$author')";
38  
39             $result = @mysql_query($strsql);
40         
41       
42  //執行上傳操做,設置utf8防止亂碼,並指定上傳目錄爲upload
43          move_uploaded_file($_FILES["file"]["tmp_name"],iconv("UTF-8", "gb2312", "upload/".$confname .'.'. $extension));
44 
45 
46 header("location:index.php");
47 }                 

download.php(下載文件代碼)git

 1 <?php  
 2 $file_name = $_GET['name'];     //獲取下載文件名   
 3 $file_dir = $_GET['dir'];        //獲取下載文件存放目錄    
 4 //檢查文件是否存在    
 5 if (! file_exists ( $file_dir . $file_name )) {   
 6     header('HTTP/1.1 404 NOT FOUND');  
 7 } else {    
 8     //清除表頭信息,沒有會形成亂碼,圖片不能顯示等問題
 9      ob_clean();
10     //以只讀和二進制模式打開文件        
11     $file = fopen ( $file_dir . $file_name, "rb" ); 
12 
13     //告訴瀏覽器這是一個文件流格式的文件    
14     Header ( "Content-type: application/octet-stream" ); 
15     //請求範圍的度量單位  
16     Header ( "Accept-Ranges: bytes" );  
17     //Content-Length是指定包含於請求或響應中數據的字節長度    
18     Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );  
19     //用來告訴瀏覽器,文件是能夠當作附件被下載,下載後的文件名稱爲$file_name該變量的值。      
20  Header ( "Content-Disposition: attachment; filename=" . $file_name );    
21     //讀取文件內容並直接輸出到瀏覽器    
22     echo fread ( $file, filesize ( $file_dir . $file_name ) );    
23     fclose ( $file );
24 
25     exit ();    
26 }
前臺及數據庫文件就不碼了
有須要完整demo的能夠訪問github:https://github.com/2-1-1/www/tree/master/testupload

項目目錄github

根目錄文件夾:webweb

根目錄下文件:index.html(登陸頁面),login.php(登陸註銷處理頁面),index.php(文件列表及下載展現頁面),upload.html(上傳頁面),upload.php(上傳處理頁面),download.php(下載處理頁面)。sql

  次級目錄文件夾:Connections數據庫

     次級目錄下文件:connect.php跨域

  次級目錄文件夾:upload瀏覽器

相關文章
相關標籤/搜索