使用PHP將檔案上傳到MySQL資料庫

2021-10-06 12:15:17 字數 4357 閱讀 8103

您可能想知道為什麼要將檔案「放入」資料庫,而不是僅僅放入檔案系統。 好吧,在大多數時候,你不會。

在您的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,切換到需要上傳檔案的目錄下,執行上面的命令,就將該目錄變成了本...