使用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