如何在php中上传下载附件并以二进制的形式保存到数据库中的

解决方案 »

  1.   

    抛砖引玉。数据表:
    CREATE TABLE IF NOT EXISTS `upload` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `filename` varchar(255) NOT NULL,
      `type` varchar(255) NOT NULL,
      `data` longblob NOT NULL,
      PRIMARY KEY (`id`)
    ) DEFAULT CHARSET=utf8PHP代码:
    <?php
    header('content-type: text/html; charset=utf-8');$mysqli = new mysqli('localhost', 'root', 'root', 'csdn');
    $mysqli->set_charset('utf8');function alert($msg)
    {
    echo '<script type="text/javascript">';
    echo 'alert("', $msg, '");';
    echo '</script>';
    }$action = isset($_GET['action']) ? $_GET['action'] : '';if ($action == 'upload')
    {
    if (is_uploaded_file($_FILES['upload']['tmp_name']))
    {
    $filename = $_FILES['upload']['name'];
    $type = $_FILES['upload']['type'];
    $handle = fopen($_FILES['upload']['tmp_name'], 'rb');
    $data = fread($handle, filesize($_FILES['upload']['tmp_name']));
    fclose($handle);
    $stmt = $mysqli->prepare('INSERT INTO `upload` (`filename`, `type`, `data`) VALUES (?, ?, ?)');
    $stmt->bind_param('sss', $filename, $type, $data);
    if (!$stmt->execute()) alert('上传失败!');
    }
    else alert('上传失败!');
    }if ($action == 'download')
    {
    $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
    if ($id > 0)
    {
    $stmt = $mysqli->prepare('SELECT `filename`, `type`, `data` FROM `upload` WHERE `id`=?');
    $stmt->bind_param('i', $id);
    if ($stmt->execute() && $stmt->store_result() && $stmt->num_rows > 0)
    {
    $stmt->bind_result($filename, $type, $data);
    $stmt->fetch();
    header('content-type: ' . $type);
    header('content-disposition: attachment; filename=' . $filename);
    echo $data;
    exit;
    }
    else alert('文件不存在!');
    }
    else alert('文件不存在!');
    }$result = $mysqli->query('SELECT `id`, `filename` FROM `upload`');
    if ($result && $result->num_rows > 0)
    {
    echo '<ul>';
    while ($row = $result->fetch_object())
    {
    echo '<li><a href="', basename(__FILE__), '?action=download&id=', $row->id, '">';
    echo $row->filename, '</a></li>';
    }
    echo '</ul>';
    }
    else echo '没有文件<br/>';
    ?>
    <hr/>
    <form action="<?php echo basename(__FILE__);?>?action=upload" method="post" enctype="multipart/form-data">
    <input type="file" name="upload"/> 
    <input type="submit" value="上传"/>
    </form>
      

  2.   

    看看vBB的代码吧,啦就是采用的数据库保存附件