使用php的mysql数据库中的大文件的数据类型是什么?
我有一些代码可以让用户下载数据库中特定数据类型的文件,下载php代码可以让用户下载文件 在我的sql部分中,我将mime数据类型设置为varchar(20),大小设置为bigint(20),数据设置为longblob。但是,当我单击下载按钮时,它会显示文件已损坏,但当我在数据库中签出详细信息时,会手动存储详细信息 那么您认为数据类型有错误吗,或者我必须更改download.php或upload.php吗 Download.php如下所示:使用php的mysql数据库中的大文件的数据类型是什么?,php,mysql,database,upload,download,Php,Mysql,Database,Upload,Download,我有一些代码可以让用户下载数据库中特定数据类型的文件,下载php代码可以让用户下载文件 在我的sql部分中,我将mime数据类型设置为varchar(20),大小设置为bigint(20),数据设置为longblob。但是,当我单击下载按钮时,它会显示文件已损坏,但当我在数据库中签出详细信息时,会手动存储详细信息 那么您认为数据类型有错误吗,或者我必须更改download.php或upload.php吗 Download.php如下所示: if(isset($_GET['id'])) { //
if(isset($_GET['id'])) {
// Get the ID
$id = ($_GET['id']);
// Make sure the ID is in fact a valid ID
if($id <= 0) {
die('The ID is invalid!');
}
else {
// Connect to the database
$dbLink = new mysqli('server', 'databaseuser', 'password', 'databasename');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
// Fetch the file information
$query = "
SELECT `mime`, `name`, `size`, `data`
FROM `files`
WHERE `id` = {$id}";
$result = $dbLink->query($query);
if($result) {
// Make sure the result is valid
if($result->num_rows == 1) {
// Get the row
$row = mysqli_fetch_assoc($result);
// Print headers
header("Content-Type: ". $row['mime']);
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment; filename=". $row['name']);
// Print data
echo $row['data'];
}
else {
echo 'Error! No files exists with that ID.';
}
}
else {
echo "Error! Query failed: <pre>{$dbLink->error}</pre>";
}
@mysqli_close($dbLink);
}
}
else {
echo 'Error! No ID was passed.';
}
?>
if(isset($\u GET['id'])){
//拿到身份证
$id=($_GET['id']);
//确保该ID实际上是有效的ID
if($id查询($query);
如果($结果){
//确保结果有效
如果($result->num_rows==1){
//吵架
$row=mysqli\u fetch\u assoc($result);
//打印标题
标题(“内容类型:.$row['mime']);
标题(“内容长度:.$row['size']);
标题(“内容处置:附件;文件名=“.$row['name']);
//打印数据
echo$row['data'];
}
否则{
echo“错误!不存在具有该ID的文件。”;
}
}
否则{
echo“错误!查询失败:{$dbLink->Error}”;
<?php
// Check if a file has been uploaded
if(isset($_FILES['uploaded_file'])) {
// Make sure the file was sent without errors
if($_FILES['uploaded_file']['error'] == 0) {
// Connect to the database
$dbLink = new mysqli('server', 'databaseuser', 'password', 'databasename');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
// Gather all required data
$name = $dbLink->real_escape_string($_FILES['uploaded_file']['name']);
$mime = $dbLink->real_escape_string($_FILES['uploaded_file']['type']);
$data = $dbLink->real_escape_string(file_get_contents($_FILES ['uploaded_file'] ['tmp_name']));
$size = intval($_FILES['uploaded_file']['size']);
// Create the SQL query
$query = "
INSERT INTO `files` (
`name`, `mime`, `size`, `data`, `created`
)
VALUES (
'{$name}', '{$mime}', {$size}, '{$data}', NOW()
)";
// Execute the query
$result = $dbLink->query($query);
// Check if it was successfull
if($result) {
echo 'Success! Your file was successfully added!';
}
else {
echo 'Error! Failed to insert the file'
. "<pre>{$dbLink->error}</pre>";
}
}
else {
echo 'An error accured while the file was being uploaded. '
. 'Error code: '. intval($_FILES['uploaded_file']['error']);
}
// Close the mysql connection
$dbLink->close();
}
else {
echo 'Error! A file was not sent!';
}
// Echo a link back to the main page
echo '<p>Click <a href="index.html">here</a> to go back</p>';
?>
}
@mysqli_close($dbLink);
}
}
否则{
echo“错误!未传递ID”;
}
?>
Upload.php如下所示:
一般来说,文件应存储在文件系统或共享存储系统(如S3或NFS)中,文件路径/URL应存储为字符串。存储实际文件会带来各种问题-数据库上的工作比必要的多得多,备份不愉快等。请显示相关的下载/上载PHP代码。以及至少,结果与原始数据不同吗?您是否尝试过比较两个结果文件,可能是使用十六进制编辑器?@AirThomas,检查代码。我已经上载了两个文件。@deceze,只有结果。数据库适当地存储了所有文件,它有数据类型、正确的大小、名称和所有内容。但是当我单击“下载”按钮并尝试下载,有时它只显示一半的图片,对于pdf和doc文件,它只显示错误。这是最好的解决方案,即使它没有直接回答所提出的问题。@ceejayoz,我已经编辑了我以前的问题,并提供了两个文件download.php和upload.php,其中upload将有助于o先上传文件,然后下载将下载文件,数据库类型将存储数据类型。请检查代码,看我是否遗漏了任何内容。