使用PHP,我試圖下載一個已經上傳到Oracle 10g數據庫的blob文件。我已經看到並模仿了我發現的大量例子。當我訪問該頁面時,出現一個文件下載對話框,允許我打開或保存。如果我點擊打開,媒體播放器會自動彈出,但不會檢索文件。如果我選擇保存,我總是會收到一條錯誤消息,指出「Internet Explorer無法打開此Internet站點,請求的站點不可用或無法找到,請稍後重試。」使用Oracle和PHP下載BLOB文件
下面是我的代碼,它非常簡單,非常像我找到的例子。
<?php
header('Content-Disposition: attachment; filename='.$_GET['fileName']);
header('Content-length: '.$_GET['fileSize']);
header('Content-type: '.$_GET['mimeType']);
require_once("Include/Application.php");
$connection = oci_connect ($userID, $password, $TNS);
$phpCur = oci_new_cursor($connection);
$stmt = oci_parse($connection, "BEGIN MOR.DOWNLOAD_ATTACHMENT (:morID, :attachmentType, :phpCur); END;");
oci_bind_by_name($stmt, ":morID", $_GET['morID'], -1);
oci_bind_by_name($stmt, ":attachmentType", $_GET['attachmentType'], -1);
oci_bind_by_name($stmt, "phpCur", $phpCur, -1, OCI_B_CURSOR);
oci_execute($stmt);
oci_free_statement($stmt);
$output = '';
oci_execute($phpCur);
while($row = oci_fetch_array($phpCur))
$output .= $row['ATTACHMENT_BL'];
oci_free_statement($phpCur);
oci_close($connection);
echo $output;
exit;
?>
'標題( '內容長度:'。$ _ GET [ '檔案大小']);' - 內容長度由GET參數確定,而不是blob數據的實際(字節)大小?聽起來不對。 – VolkerK 2010-08-10 16:03:41
當文件上傳時,附件的大小存儲在一個單獨的字段中。在我打電話給這個頁面之前,我使用AJAX調用來獲取這些信息。我不知道這是否是標準做法,但據我瞭解,我需要提前知道文件大小,以便爲頭文件提供它。儘管現在我看到我的程序調用後有三個頭部語句,但我可以在下載BLOB的同時獲得這些信息。 – user39653 2010-08-10 16:55:39