我已经通过VS2010(Ref)在桌面上运行的MSSQL中上传了一个pdf文件(varbinary(MAX))
该表具有与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:我确实创建了一些图像,但无法发布,很抱歉的格式
到目前为止我做了什么
我在这里使用"无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 |
是的,这是可能的。创建一个指向单独页面的链接,该页面接受查询字符串中的记录。例如,您可以链接到ViewFile.php?recordid=123
。
然后,在ViewFile.php中,您可以获得二进制数据,输出一些头文件,并输出二进制文件(我认为即使是echo也足够了)。
标头应至少包含一个Content-Type
标头,告诉浏览器二进制数据将被解释为application/pdf
数据。如果不是pdf格式,则应指定适当的标题。有效内容类型的列表可以在互联网上找到。
您也可以指定文件名。但重要的是,你可以确定它是什么样的数据。如果你不知道它是图标还是pdf,你也无法告诉浏览器。浏览器需要知道(通过读取内容类型标题)应该如何解释数据。即使url的扩展名是.pdf,它也猜不到。