使用PHP从网页上的数据库中获取二进制文件(pdf)

时间:2011-06-08 20:31:35

标签: php sql-server file binary

我已经通过VS2010(Ref)在我的桌面上运行的MSSQL中上传了一个pdf文件(varbinary(MAX)),只有Ref。中的UPDATE语句。

该表包含与pdf相关的其他数据,如名称,描述,日期。

数据库中的表:

Name       |  Description    |    Date      |    File            |

DataSheet  |  Milling M/C    |  2004-01-01  |    <Binary data>   |

是否可以在网页中显示表格内容

Name       |  Description    |    Date      |    File            |`

DataSheet  |  Milling M/C    |  2004-01-01  | (link to the pdf)  |

Name       |  Description    |    Date      |    File            |

DataSheet  |  Milling M/C    |  2004-01-01  | (an icon of pdf)   |

使用PHP,以便用户可以单击链接/文件进行查看。会有很多行,例如我只给了一行。

如果我不清楚,请告诉我,提前谢谢。

PS:我确实创建了一些图片,但无法发布,抱歉格式


到目前为止我做了什么


我正在使用here

中的“不使用DSN连接(使用连接字符串)”
$conn = new COM ("ADODB.Connection") or die("Cannot start ADO");

$connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;

$conn->open($connStr);

$query = "select * from Table";

$rs = $conn->execute($query);

$num_columns = $rs->Fields->Count();

for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
    }

while (!$rs->EOF)
{
for ($i=0; $i < $num_columns; $i++) {
echo $fld[$i]->value;
    }   
$rs->MoveNext();    
}

我得到的结果是二进制数据的垃圾。

DataSheet | Milling M/C | 2004-01-01 | some_garbage |

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。创建指向接受记录的单独页面的链接在查询字符串中。例如,您可以链接到ViewFile.php?recordid=123

然后,在ViewFile.php中,您可以获取二进制数据,输出一些标题,并输出二进制文件(我认为甚至echo也足够了)。

标题应包含至少一个Content-Type标题,告诉浏览器二进制数据将被解释为application/pdf数据。如果它不是pdf,则应指定适当的标题。可以在互联网上找到有效内容类型列表。

您也可以指定文件名。但重要的是你可以确定它是什么类型的数据。如果您不知道它是图标还是PDF格式,您也无法告诉浏览器。浏览器需要知道(通过读取内容类型标题)如何解释数据。即使网址的扩展名为.pdf,也无法猜测。