如何在PHP中为上传的文件创建下载链接

时间:2013-12-01 12:11:03

标签: php mysql

我是PHP代码的新手。目前我正在创建一个关于文件上传/下载的项目,用户可以在其帐户中登录和上传商店下载文件。

我的问题是,如何制作用户上传的文件可以下载?我的意思是,下载每个上传文件的链接?这里有人可以建议我代码吗?

到目前为止,我已成功上传和列出成功上传文件的代码。下面是已经完成的代码,这里的每个人都可以帮助我编写下载功能。

    //code for listing uploaded files in "userpage.php"

    <div class="box6">
        <h3>File Lists</h3>
        <?php
        $username = $_SESSION['UserName'];
        if($handle = opendir('users/'.$username.'/')){
            while(false !== ($entry = readdir($handle))){
                if($entry != "." && $entry != ".."){
                    echo "$entry<br>";
                }
            }
            closedir($handle);
        }
        ?>
        <table width="650">
        <tr>
        <td>
        <?php echo $entry ;?>
        </td>
        </tr>
        </table>

    //code for uploading files after users press the upload button 

    <?php
    require("connection.php");
    session_start();
    $username = $_SESSION['UserName'];
    $udir= "users/".$username."/";
    $ufile = $udir . basename($_FILES['file']['name']);
    $file = ($_FILES['file']['name']);
    mysql_query("UPDATE `users` SET `Files` = '$file'") ; 
    if(move_uploaded_file($_FILES['file']['tmp_name'], $ufile)){
 header('location:uploadfiles.php?feedback3=uploadsuccessful');
    }
    else{
 header('location:uploadfiles.php?feedback3=uploaderror');
    }
    ?>

非常感谢你。

2 个答案:

答案 0 :(得分:1)

来自PHP手册:http://us1.php.net/fpassthru

<?php

// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

// dump the picture and stop the script
fpassthru($fp);
exit;

?>

如果您不希望为每种文件类型提供一个application/octet-stream,则可能需要使用Content-Type

同时提供Content-Disposition将强制浏览器显示或下载文件以查找可显示的图像和其他文件。

答案 1 :(得分:-3)

  

警告: 请勿使用 - 您将被拒绝。


简单编码下载所有文件以下载任何文件ex:images,excel,ppt,pdf以及此代码更高度用于图像下载.u可以非常轻松地上传和下载。你需要文件夹中的文件夹。你可以上传文件移动到文件夹你可以在文件夹中找到文件夹。你需要数据库存储上传文件名并下载点击文件名自动下载。我带来链接到download.php文件,这是自动下载文件。你不需要改变下载文件..., Upload and Download files in php

<?php
$conn=mysql_connect("localhost","root","") or die(mysql_error());
$sdb=mysql_select_db("demo",$conn) or die(mysql_error());
if(isset($_POST['submit'])!=""){
$name=$_FILES['photo']['name'];
$size=$_FILES['photo']['size'];
$type=$_FILES['photo']['type'];
$temp=$_FILES['photo']['tmp_name'];
$caption1=$_POST['caption'];
$link=$_POST['link'];
move_uploaded_file($temp,"files/".$name);
$insert=mysql_query("insert into upload(name)values('$name')");
if($insert){
header("location:index.php");
}
else{
die(mysql_error());
}
}
?>
<html>
<head>
<title>Upload and Download</title>
</head>
<style>
body{ font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;}
a{color:#666;}
#table{margin:0 auto;background:#333;box-shadow: 5px 5px 5px #888888;border-radius:10px;color:#CCC;padding:10px;}
#table1{margin:0 auto;}
</style>
<body>
<h2><a href="http://crackerworld.blogspot.in/">Cracker World</a></h2>
<h3><p align="center">Files Upload And Download</p></h3>
<form enctype="multipart/form-data" action="" name="form" method="post">
<table border="0" cellspacing="0" cellpadding="5" id="table">
<tr>
<th >Chosse Files</th>
<td ><label for="photo"></label><input type="file" name="photo" id="photo" /></td>
</tr>
<tr>
<th colspan="2" scope="row"><input type="submit" name="submit" id="submit" value="Submit" /></th>
</tr>
</table>
</form>
<br />
<br />
<table border="1" align="center" id="table1" cellpadding="0" cellspacing="0">
<tr><td align="center">Click to Download</td></tr>
<?php
$select=mysql_query("select * from upload order by id desc");
while($row1=mysql_fetch_array($select)){
$name=$row1['name'];
?>
<tr>
<td width="300">
<img src="tick.png" width="14" height="14"><a href="download.php?filename=<?php echo $name;?>"><?php echo $name ;?></a>
</td>
</tr>
<?php }?>
</table>
</body>
</html>

的download.php

 <?php
function output_file($file, $name, $mime_type='')
{
if(!is_readable($file)) die('File not found or inaccessible!');

$size = filesize($file);
$name = rawurldecode($name);
$known_mime_types=array(
"pdf" => "application/pdf",
"txt" => "text/plain",
"html" => "text/html",
"htm" => "text/html",
"exe" => "application/octet-stream",
"zip" => "application/zip",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"ppt" => "application/vnd.ms-powerpoint",
"gif" => "image/gif",
"png" => "image/png",
"jpeg"=> "image/jpg",
"jpg" => "image/jpg",
"php" => "text/plain"
);
if($mime_type==''){
$file_extension = strtolower(substr(strrchr($file,"."),1));
if(array_key_exists($file_extension, $known_mime_types)){
$mime_type=$known_mime_types[$file_extension];
} else {
$mime_type="application/force-download";
};
};

@ob_end_clean();


if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
if(isset($_SERVER['HTTP_RANGE']))
{
list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
list($range) = explode(",",$range,2);
list($range, $range_end) = explode("-", $range);
$range=intval($range);
if(!$range_end) {
$range_end=$size-1;
} else {
$range_end=intval($range_end);
}
$new_length = $range_end-$range+1;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range-$range_end/$size");
} else {
$new_length=$size;
header("Content-Length: ".$size);
}
$chunksize = 1*(1024*1024);
$bytes_send = 0;
if ($file = fopen($file, 'r'))
{
if(isset($_SERVER['HTTP_RANGE']))
fseek($file, $range);

while(!feof($file) &&
(!connection_aborted()) &&
($bytes_send<$new_length)
)
{
$buffer = fread($file, $chunksize);
print($buffer);
flush();
$bytes_send += strlen($buffer);
}
fclose($file);
} else

die('Error - can not open file.');
die();
}
set_time_limit(0);
$file_path='files/'.$_REQUEST['filename'];
output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain');
?>