每次我尝试下载时,它都会生成正确的文件名和扩展名(文件)但是已损坏(通常大小为1kb且无法打开,在这种情况下,我的文件为.docx格式,大小约为12kb)。我正在使用XAMPP,我使用phpmyadmin来查看我的sql数据库。上传脚本用于将文件从计算机存储到数据库。
这是我的上传脚本: - 根据答案编辑
<?php
session_start();
include("connect.php");
$nametemp=$_SESSION['name'];
$nistemp=$_SESSION['nislogin'];
$subjecttemp=$_SESSION['subject'];
$chapter=$_POST['chapter'];
$name=$_FILES['browsefile']['name'];
$mime=$_FILES['browsefile']['type'];
$data=file_get_contents($_FILES['browsefile']['tmp_name']);
$size=$_FILES['browsefile']['size'];
mysql_query("INSERT INTO assignment (name, mime, size, data, created, uploader, subject, chapter) VALUES ('$name', '$mime', '$size', '$data', NOW(), '$nametemp', '$subjecttemp', '$chapter')");
header("location:subject.php");
die();
?>
和这里的下载脚本: - 根据答案编辑
<?php
session_start();
include("connect.php");
$nametemp=$_SESSION['name'];
$nistemp=$_SESSION['nislogin'];
$classtemp=$_SESSION['class'];
$subjecttemp=$_SESSION['subject'];
$idtemp=$_GET['id'];
$query=("SELECT mime, name, size, data FROM assignment WHERE id='$idtemp'");
$result=mysql_query($query);
$filename=mysql_result($result,0,"name");
$filesize=mysql_result($result,0,"size");
$filemime=$type=mysql_result($result,0,"mime");
$filedata=mysql_result($result,0,"data");
header("Content-disposition: attachment; filename=$filename");
header("Content-length: $filesize");
header("Content-type: $filemime");
header("Content-transfer-encoding: binary");
echo $filedata;
?>
如果您想知道,以下是“作业”表格结构的屏幕截图:image
答案 0 :(得分:0)
$数据= $ _ FILES [ 'browsefile'] [ 'tmp_name的值'];
您将上传文件的临时名称分配给“数据”列,而不是数据本身。 快速解决此问题的方法是使用file_get_contents函数。
第二:readfile从磁盘读取文件,它不提供变量的输出流。不需要这一行。
但是:不建议在数据库中保存二进制文件。请将文件本身存储在上传文件夹中并保存其名称。
另外,更改下一行
mysql_query("INSERT INTO assignment (name, mime, size, data, created, uploader, subject, chapter) VALUES ('$name', '$mime', '$size', '$data', NOW(), '$nametemp', '$subjecttemp', '$chapter')");
到
mysql_query("INSERT INTO assignment (name, mime, size, data, created, uploader, subject, chapter) VALUES ('$name', '$mime', '$size', '" . mysql_real_escape_string($data) . "', NOW(), '$nametemp', '$subjecttemp', '$chapter')");
接下来:请考虑更改为PDO,而不是使用旧的Mysql_ *函数(它们已被弃用)。