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


sql server - binary file(pdf) from database on web page using PHP

我已经通过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,它也猜不到。