2011-01-05 27 views
0
$fileName = $_FILES['userfile']['name']; 
$tmpName = $_FILES['userfile']['tmp_name']; 
$fileSize = $_FILES['userfile']['size']; 
$fileType = $_FILES['userfile']['type']; 

$fp  = fopen($tmpName, 'r'); 
$content = fread($fp, filesize($tmpName)); 
$content = addslashes($content); 
fclose($fp); 

if(!get_magic_quotes_gpc()) 
{ 
    $fileName = addslashes($fileName); 
} 


$fileName_th = $_FILES['thumbnail']['name']; 
$tmpName_th = $_FILES['thumbnail']['tmp_name']; 
$fileSize_th = $_FILES['thumbnail']['size']; 
$fileType_th = $_FILES['thumbnail']['type']; 


$fp_th  = fopen($tmpName_th, 'r'); 
$content_th = fread($fp_th, filesize($tmpName_th)); 
$content_th = addslashes($content_th); 
fclose($fp_th); 

if(!get_magic_quotes_gpc()) 
{ 
    $fileName_th = addslashes($fileName_th); 
} 

$query = "INSERT INTO Images (profile_id, thumb, name, size, type, content) ". 
"VALUES ('$profile_id', 0, '$fileName', '$fileSize', '$fileType', '$content'),('$profile_id', 1, '$fileName_th', '$fileSize_th', '$fileType_th', '$content_th') "; 

$r = mysqli_query($dbc, $query); 


echo "<br>$first_name uploaded successfully"; 

這是我用來上傳我的圖像到我的數據庫的方法。現在,我想要做的是有一個編輯頁面,它可以編輯我的表單元素(如文本),並對圖像進行更改。已將圖像上載到mysql數據庫,但是我可以檢索它以查看編輯頁面嗎?

我知道如何查詢文本元素並將它們放回到它們各自的輸入字段中,但是如何爲圖像等文件執行此操作?

問題:將文件「上傳」到數據庫的最佳方式是什麼?這是我的方式嗎?還是有一種方法只是將文件寫入目錄並將路徑保存在數據庫中?

回答

1

好問題。如果您正在訪問另一臺計算機上的接口,則無法與文本元素具有相同的含義,因爲圖像可能不會與您存儲在相同的位置。

當我在過去看到過這種需求時,通常會簡單地顯示存儲的圖像,並給出替換/刪除的選項。與文本輸入不同,你永遠不會改變圖像的一部分,你會改變整個事情,所以不需要提供存儲的圖像路徑進行編輯。

0

除非你有特殊需要來存儲文件,你現在的樣子,一個非常簡單的解決辦法是將文件上傳到網絡服務器(而不是直接到數據庫)和簡單的鏈接存儲他們(這是我爲播客解決方案所做的,使用mp3而不是圖片,但其中的許多想法都是一樣的)。通過鏈接,您可以簡單地在您的佈局中使用<img>標籤,其中src字段根據您在數據庫中放置的信息填充。

0

您需要將它們作爲image type提供給客戶端。通常,我會實現一個視圖(或頁面,取決於您的術語;)),用於查詢和呈現圖像。例如:http://myurl.com/index.php/images/index/id/[db image pkey](也就是說,如果你使用的是一個MVC框架,例如CI,否則你可以使用任何.php文件達到相同的結果)。

使用示例URL,控制器(圖像)將負責實例化圖像模型,該模型使用URL中指定的pkey來查詢數據庫中的圖像。視圖(或頁面)將從模型中獲取數據結果,只需將Content-type頭設置爲圖像內容類型即可,然後將二進制圖像數據提供給客戶端。如果您將表單數據的其餘部分渲染爲不同的MIME類型,則無法通過內聯實現這種內聯方式。

編輯:上面說了一下之後,看了一下之後,似乎你可能不想這麼做(讀this瞭解更多細節,爲什麼不)。將它們作爲靜態圖像存儲在文件系統上會更好。

+1

很好的例子如何顯示內聯圖像是有http://www.greywyvern.com/code/php/binary2base64 – FDisk 2011-01-05 19:37:46

+0

不知道這一點,謝謝。不確定我對此感覺如何;) – 2011-01-05 19:52:48

0

你只需要添加頁眉這樣image.php

<?php 
if (!empty($_GET['image']) && $_GET['image'] > 0) { 
    //Connect to the database 
    mysql_connect("localhost","root","root"); 
    mysql_select_db("database"); 

    //Select image content 
    $sql = mysql_query("SELECT `content`, `type` FROM `Images` WHERE profile_id = ".(int)$_GET['image']." LIMIT 1"); 
    $row = mysql_fetch_assoc($sql); 

    //Just display the image and finish the application 
    header("Content-type: image/{$row['type']}"); 
    die($row['content']); 
} 
?> 

可以有一些錯誤。主要的是發送正確的標題。 到該圖像可以與標籤像這樣訪問:

<img src="image.php?image=1" alt="" /> 

但是,如果你想在你需要編碼爲Base64和內嵌式地顯示這樣的同一場景,以顯示圖像:

//Imagine that we already got content from the database 
$row['content'] = base64_encode($row['content']); 

//Prepare inline image 
$row['content'] = "data:image/{$row['type']};base64,".$row['content']; 

//You will get something like this 
/* 
data:image/png;base64,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%3D 
*/ 

echo "<img src=\"{$row['content']}\" />"; 
相關問題