正在上传一个word文档,存储在mysql上并显示出来
Uploading a word document, storing it on mysql and displaying it
嗨,我知道 php 基础知识等等。我最近重新发现了它并自学了新技术。所以请多多包涵...
在此任务中,我要通过 php 上传 MS Word 文档,将其存储在 mysql 上并在需要时检索。
这可能吗? .doc 之类的文件应该与名字、姓氏、电子邮件等存储在同一个数据库中,还是应该将其存储为用于文件上传的单独数据库上的 BLOB?我不确定 mysql 是否能够读取 .doc 文件中的每一行?谢谢。有没有适合像我这样的初学者的在线示例?
我已经做了研究。有人说我不应该使用 mysql 来存储文本文件,其他人说我可以。
我目前有:
<form action="insert.php" method="post">
<label>First Name:</label><input type="text" name="firstname" id="firstname"/><br>
<label>Last Name:</label><input type="text" name="lastname" id="lastname"/><br>
<label>Email:</label><input type="text" name="email" id="email"/><br>
<div><label id="upload">Select file to upload:
<input type="file" id="upload" name="upload"/></label></div><br>
<input type="submit" name=submit value="Submit"/>
</form>
这里有几个话题要讨论。
形式
要上传文件,请更改表单 enctype 属性。
<form action="insert.php" method="post" enctype="multipart/form-data">
:
</form>
存储文件
您可以将文件存储在数据库中,也可以将其作为文件存储在服务器磁盘系统中。无论您选择什么,都没有必要将文件拆分成行。将文件存储为一个单元。
Read this entry which discusses the topic.
在这里只需说明您的数据库字段的类型和大小应该足以容纳文件。
就个人而言,我很喜欢将文件存储在磁盘上,并将文件名存储在数据库中。
文件上传处理
您可以将文件保存在磁盘上。这不是最好的方法,但却是最简单的演示方法。 SO上有足够的例子,例如How to upload & Save Files with Desired name
$info = pathinfo($_FILES['upload']['name']);
$ext = $info['extension']; // get the extension of the file
$newname = "newname.".$ext;
$target = 'mydocs/'.$newname;
move_uploaded_file( $_FILES['upload']['tmp_name'], $target);
正在下载文件
要显示和下载文件,只需将内容打印到浏览器即可。
ob_start();
// do things. See below
ob_clean();
flush();
readfile($file);
ob_flush();
这将显示文件并可能混淆浏览器。要告诉浏览器将文件作为 Word 文档处理,您必须在发送文件之前向浏览器发送适当的 headers。
ob_start();
if(isset($_REQUEST['dlink']))
{
$file = $_REQUEST['dlink'];
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
ob_flush();
嗨,我知道 php 基础知识等等。我最近重新发现了它并自学了新技术。所以请多多包涵...
在此任务中,我要通过 php 上传 MS Word 文档,将其存储在 mysql 上并在需要时检索。
这可能吗? .doc 之类的文件应该与名字、姓氏、电子邮件等存储在同一个数据库中,还是应该将其存储为用于文件上传的单独数据库上的 BLOB?我不确定 mysql 是否能够读取 .doc 文件中的每一行?谢谢。有没有适合像我这样的初学者的在线示例? 我已经做了研究。有人说我不应该使用 mysql 来存储文本文件,其他人说我可以。 我目前有:
<form action="insert.php" method="post">
<label>First Name:</label><input type="text" name="firstname" id="firstname"/><br>
<label>Last Name:</label><input type="text" name="lastname" id="lastname"/><br>
<label>Email:</label><input type="text" name="email" id="email"/><br>
<div><label id="upload">Select file to upload:
<input type="file" id="upload" name="upload"/></label></div><br>
<input type="submit" name=submit value="Submit"/>
</form>
这里有几个话题要讨论。
形式
要上传文件,请更改表单 enctype 属性。
<form action="insert.php" method="post" enctype="multipart/form-data">
:
</form>
存储文件
您可以将文件存储在数据库中,也可以将其作为文件存储在服务器磁盘系统中。无论您选择什么,都没有必要将文件拆分成行。将文件存储为一个单元。
Read this entry which discusses the topic.
在这里只需说明您的数据库字段的类型和大小应该足以容纳文件。
就个人而言,我很喜欢将文件存储在磁盘上,并将文件名存储在数据库中。
文件上传处理
您可以将文件保存在磁盘上。这不是最好的方法,但却是最简单的演示方法。 SO上有足够的例子,例如How to upload & Save Files with Desired name
$info = pathinfo($_FILES['upload']['name']);
$ext = $info['extension']; // get the extension of the file
$newname = "newname.".$ext;
$target = 'mydocs/'.$newname;
move_uploaded_file( $_FILES['upload']['tmp_name'], $target);
正在下载文件 要显示和下载文件,只需将内容打印到浏览器即可。
ob_start();
// do things. See below
ob_clean();
flush();
readfile($file);
ob_flush();
这将显示文件并可能混淆浏览器。要告诉浏览器将文件作为 Word 文档处理,您必须在发送文件之前向浏览器发送适当的 headers。
ob_start();
if(isset($_REQUEST['dlink']))
{
$file = $_REQUEST['dlink'];
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
ob_flush();