【发布时间】:2014-06-27 17:18:31
【问题描述】:
目前我的文件上传进度如下:
- 用户选择要上传的文件。
-
然后我使用以下 PHP 代码将用户上传的文件重命名为唯一名称:
$ext = explode('.', basename( $_FILES['file1']['name'])); $file_name1 = md5(uniqid()) . "." . $ext[count($ext)-1]; 之后,我只需将这个独特的文件上传到我的“upload_doc/”目录。
现在我的脚本中有一个选项可以下载这个上传的文件。要下载,我只是从“updload_doc/”目录中调用这个unique 文件名并下载它。
现在它会在我下载文件时显示我重新生成的文件名。
有没有办法用它的原始名称而不是unique文件名下载这个文件?
注意:我可以将原始文件上传到目录,但如果用户上传相同的文件会发生什么?各位大佬能说说有什么诀窍吗?
我的文件下载系统:
这是一个下载按钮:
<a target="_self" href="download.php?filename=<?php echo $rselectfile1['file_name']; ?>"><input type="button" name="download" value="Download" class="submit"/></a>
这是download.php文件
<?php
@session_start();
//require_once("config.php");
if(!isset($_SESSION['front_username']) && isset($_SESSION['front_username']) == "" &&
!isset($_SESSION['front_password']) && isset($_SESSION['front_password']) == "" &&
!isset($_SESSION['user_id']) && isset($_SESSION['user_id']) == "") {
header("Location:login.php");
exit();
}
$file_get = $_GET['filename'];
$tmp = explode(".",$file_get);
switch ($tmp[count($tmp)-1]) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "docx":
case "doc": $ctype="application/msword"; break;
case "csv":
case "xls":
case "xlsx": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
case "tif":
case "tiff": $ctype="image/tiff"; break;
case "psd": $ctype="image/psd"; break;
case "bmp": $ctype="image/bmp"; break;
case "ico": $ctype="image/vnd.microsoft.icon"; break;
default: $ctype="application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".$file_get."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile("upload_doc/$file_get" );
?>
【问题讨论】:
-
当然,在重命名之前为名称设置一个变量。
-
@Fred-ii- 我不明白。
-
$filename = $_FILES["uploaded_file"]["name"];根据developphp.com/page.php?id=449 -
@Fred-ii- 说了什么,但你必须在某个地方跟踪它。或者,您可以将原始名称作为唯一名称的一部分,但使用分隔符,以便于重新解析。
-
@TecBrat 不,我不想将其与原始唯一 ID 混为一谈。