2010-09-24 49 views
1

如何使用PHP將PDF文件存儲在MySQL數據庫中?如何在mysql中存儲pdf

+0

因爲我們無法允許上傳PDF格式的users..so我們要存儲db..i的PDF不知道這什麼東西...... – user389055 2010-09-24 09:34:57

回答

4

...?但爲什麼你需要它?

+0

因爲我們無法允許上傳文件的用戶。 – user389055 2010-09-24 09:33:00

+3

這實際上並不是一個好的理由。文件仍將被上傳。這只是你如何存儲它的問題。 – AlexanderMP 2010-09-24 09:34:40

7

使用BLOB(二進制大對象)(longblob數據類型)

$fileHandle = fopen($fileUpload, "r"); 
$fileContent = fread($fileHandle, $fileUpload_size); 
$fileContent = addslashes($fileContent); 
$dbQuery = "INSERT INTO myBlobs VALUES "; 
$dbQuery .= "('$fileContent')"; 

可用here

但完整的教程我們強烈建議您存儲在文件系統中的文件,只是在添加一個引用DB(具有文件路徑和名稱的字段)。有幾個原因:

  • 更快
  • 更容易獲得(不需要任何特殊的應用程序)
  • 更快的備份速度
  • 不佔空間
1

正如其他人所提到的,你可以使用一個BLOB類型。

或者,你也可以做的是保存在文件系統中的PDF並保存相關鏈接到數據庫中。這與用於保存諸如縮略圖和其他數據類型的東西相同的原理可能對用戶是獨特的,並且在資源方面是昂貴的。

1

如果你只是希望存儲在服務器上上傳PDF文件,這是較常用到的文件複製到指定目錄中唯一的文件名,並簡單地存儲在你的MySQL表文件的完整路徑。

如果您確實希望將文件的完整二進制數據存儲在MySQL數據庫中,那麼您將需要做更多的工作來將二進制數據放入MySQL中的BLOB字段,然後將其返回當您稍後再次將其拉出時,將其轉換爲文件。

你可能會想不僅存儲在你的MySQL表文件的二進制數據,而且文件名,文件類型和文件的甚至可能是大小(在您的網頁列表)。你可能會想要一個表格,如;

CREATE TABLE files (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    filename VARCHAR(128) NOT NULL, 
    mimetype VARCHAR(64) NOT NULL, 
    data MEDIUMBLOB NOT NULL 
); 

在你的PHP中,你可以插入一個上傳的文件,如下所示:

$filePointer = fopen($_FILES['fileUpload']['tmp_name'], 'r'); 
$fileData = fread($filePointer, filesize($_FILES['fileUpload']['tmp_name'])); 
$fileData = addslashes($fileData); 
$sql = "INSERT INTO files (filename, mimetype, data) VALUES($fileName, $fileType, $fileData)"; 

回來了再次獲得該文件將要求選擇適當的文件,然後專用腳本使用了一系列的「頭」命令,以推動該文件回落到瀏覽器的形式瀏覽器知道如何處理它。

你可以閱讀關於這個here一個完整的教程。