您可能想知道為什麼要將檔案「放入」資料庫,而不是僅僅放入檔案系統。 好吧,在大多數時候,你不會。
在您的php應用程式需要儲存整個檔案的情況下,首選方法是將檔案儲存到伺服器的檔案系統中,並將檔案的物理位置儲存在資料庫中。 通常認為這是最簡單,最快的檔案儲存方式。
但是,在某些情況下,您可能希望將檔案本身與資料庫中的其他資料一起保留。 這使您-或更確切地說:mysql-可以完全控制檔案資料,而不僅僅是檔案在伺服器上的位置。
但是,此方法有一些缺點,例如; 降低了效能,並增加了php**和資料庫結構的複雜性。 這是您在實際應用中使用它之前應仔細考慮的事項。
話雖如此,本文演示了如何從瀏覽器將檔案上傳到mysql,以及如何將檔案傳送回瀏覽器。
在你開始之前為了順利解決此問題,您應該熟悉以下內容:
戰鬥計畫與所有程式一樣,在開始編寫之前,我們需要提前計畫。 就是這樣,我們在寫之前就知道要寫什麼。
在開始該程式之前,我們需要設計資料庫。 這不是乙個複雜的設計,因為我們不是在談論建立一些複雜的歸檔系統。 我們只需要乙個表,該錶包含檔案的blob欄位和其他欄位來儲存檔案的資訊,例如名稱,大小,型別。
接著。 該程式的第一階段是將檔案從使用者那裡獲取到伺服器上,php可以與該伺服器進行互動。 這是該過程中最簡單的部分,僅需要基本的html表單。
第二階段涉及讀取上載的檔案,確保已成功上載並將其新增到資料庫中。 這與將檔案上傳到檔案系統時使用的過程類似,但使用的是mysql函式而不是檔案系統函式。
第四部分(也是最後一部分)是有關此過程最令人困惑的部分。 我們提取檔案並將其傳送到客戶端瀏覽器的部分。
我們首先使用mysql函式以及階段3傳送的id,以從資料庫中獲取檔案資料。 然後,在最終傳送檔案內容之前,設定一些標頭,以使瀏覽器知道預期的內容。
現在,使用此摘要作為指導,開始編寫程式。
階段0:建立資料庫資料庫很簡單。 乙個表,帶有用於檔案資料的blob欄位,而幾個字段用於與檔案有關的各種資訊:
create table `file` (
`id` int unsigned not null auto_increment,
`name` varchar(255) not null default 'untitled.txt',
`mime` varchar(50) not null default 'text/plain',
`size` bigint unsigned not null default 0,
`data` mediumblob not null,
`created` datetime not null,
primary key (`id`)
)
如您所見,我們儲存檔名,包括副檔名。
我們有mime型別,用於讓瀏覽器知道我們正在處理哪種檔案。
檔案大小,以位元組為單位。
最後是資料本身,位於mediumblob欄位中。
階段1:上傳檔案現在,我們需要從使用者那裡獲取檔案。 我們設計的表不需要使用者提供任何其他資訊,因此我們將使其變得簡單,並建立乙個html表單,其中僅包含乙個「檔案」輸入欄位和乙個提交按鈕:
see all files
請注意元素的第三個屬性「 enctype」。
這告訴瀏覽器如何將表單資料傳送到伺服器。
就這樣,在傳送檔案時,必須將其設定為「 multipart / form-data」。
如果以其他任何方式設定或根本沒有設定,則可能無法正確傳輸檔案。
在底部,我們有乙個指向第3階段建立的列表的鏈結。
階段2:將檔案新增到資料庫在第1階段構建的表單中,我們將action屬性設定為「 add_file.php」。 這是我們在流程的此階段要構建的檔案。
此檔案需要檢查檔案是否已上傳,確保已上傳且沒有錯誤,然後將其新增到資料庫中:
<?php
// check if a file has been uploaded
if(isset($_files['uploaded_file']))
// gather all required data
$name = $dblink->real_escape_string($_files['uploaded_file']['name']);
$mime = $dblink->real_escape_string($_files['uploaded_file']['type']);
$data = $dblink->real_escape_string(file_get_contents($_files ['uploaded_file']['tmp_name']));
$size = intval($_files['uploaded_file']['size']);
// create the sql query
$query = "
insert into `file` (
`name`, `mime`, `size`, `data`, `created`
)values (
'', '', , '', now()
)";// execute the query
$result = $dblink->query($query);
// check if it was successfull
if($result)
else
";}}
else
// close the mysql connection
$dblink->close();
}else
// echo a link back to the main page
echo 'click here to go back
';?>
階段3:列出所有現有檔案
<?php
// connect to the database
$dblink = new mysqli('127.0.0.1', 'user', 'pwd', 'mytable');
if(mysqli_connect_errno())
// query for a list of all existing files
$sql = 'select `id`, `name`, `mime`, `size`, `created` from `file`';
$result = $dblink->query($sql);
// check if it was successfull
if($result)
else
download";}
// close table
echo '';
}// free the result
$result->free();
}else
";
}// close the mysql connection
$dblink->close();
?>
這部分通常是最容易引起混亂的部分。
當然還有很多其他標題,在這裡我將不介紹它們,但是值得研究!
<?php
// make sure an id was passed
if(isset($_get['id']))
else
// fetch the file information
$query = "
select `mime`, `name`, `size`, `data`
from `file`
where `id` = ";
$result = $dblink->query($query);
if($result)
else
// free the mysqli resources
@mysqli_free_result($result);
}else
";
}@mysqli_close($dblink);}}
else
?>
終點線因此,正如您所看到的,這並不像人們想象的那麼複雜。
當然,該**僅是出於演示目的而編寫的,我不建議您在不增加一些額外安全性的情況下使用它。 未經編輯,此**基本上將允許任何人將任何內容上傳到您的伺服器,這不是乙個好主意!
希望對您有所幫助,並祝您一切順利。
再見,
-atliþór
修訂版from:
使用git將本地檔案上傳到github
一 準備 首先需要擁有乙個github賬號以及建立好的repository,其次需要安裝git,這樣才能夠在cmd中使用相關的git語句。二 匯入 1.找到想要傳輸的本地資料夾,用cmd命令進入到這一級的目錄下。2.輸入 echo origin readme.md 建立乙個readme.md檔案 3...
將本地檔案上傳到Github
1 先進入專案資料夾 通過命令 git init 把這個目錄變成git可以管理的倉庫 git init2 把檔案新增到版本庫中,使用命令 git add 新增到暫存區裡面去,不要忘記後面的小數點 意為新增資料夾下的所有檔案 git add 3 用命令 git commit告訴git,把檔案提交到倉庫...
將本地檔案上傳到github
github不僅能儲存 實現多人合作 同時可以儲存本地檔案,實現共享,再也不用帶著電腦到處跑了,哈哈 總之,就是將本地檔案放到了網際網路上 將本地檔案上傳到github步驟 1 建立本地倉庫 執行 git init 開啟git bash,切換到需要上傳檔案的目錄下,執行上面的命令,就將該目錄變成了本...