upload.php的
<form enctype="multipart/form-data" action="uploader.php" method="POST">
Choose a file: <input name="uploadedfile" type="file" /><br />
Choose a file1: <input name="uploadedfile1" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
^ upload.php的图片 ^
uploader.php
<?php
mysql_select_db("test");
$target_path = "uploads/" . basename( $_FILES['uploadedfile']['name']);
$target_path1 = "upload1/" . basename( $_FILES['uploadedfile1']['name']);
$currentfile = $_FILES['uploadedfile']['name'];
$currentfile1 = $_FILES['uploadedfile1']['name'];
$dbfiles = mysql_query("SELECT * FROM new WHERE amount='$currentfile' || amount='$currentfile1'");
if(mysql_num_rows($dbfiles) > 0 )
{
}
else
{
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
{
echo "file1: ".$_FILES['uploadedfile']['name']."<br>";
$file1 = basename( $_FILES['uploadedfile']['name']);
mysql_query("insert into new (amount) values('$file1')");
}
if(move_uploaded_file($_FILES['uploadedfile1']['tmp_name'], $target_path1))
{
echo "file2: ".basename( $_FILES['uploadedfile1']['name']);
$file2 = basename( $_FILES['uploadedfile1']['name']);
mysql_query("insert into new (amount) values('$file2')");
}
}
?>
介绍和问题
此代码将允许用户上传2个文件,然后他们各自的文件名将保存到新的(表名),我需要它保存在表中以便我有历史记录是该文件的上传者,只是可以检索或下载它。第一个按钮是上传的文件,文件中将保存在上传文件夹中,然后下面的按钮是uploadfile1,文件将保存在 upload1 中,当用户放入在这2个按钮中有2个文件,然后用户点击保存,它将保存到自己准备好的文件夹(上传或上传1个),当用户只需在按钮上传文件或上传文件1中附加一个文件并点击上传文件/保存/提交,它仍然会将其文件名保存到表 new 并将文件保存在以下文件夹中(上传upload1 )。
问题是当用户上传相同的文件名时,例如abc.jpg已存在于表 new 和文件夹( upload1 of upload1 )中,但是有一些用户也上传abc.jpg ..问题是在文件夹中(上传的upload1 )abc.jpg只会有一个(一个pcs ..)因为同一个文件名..我认为解决方案是重命名,其中当前上传的abc.jpg将变为abc_1.jpg,同样在表格中 new abc_1.jpg将保存..
答案 0 :(得分:1)
您不应按原始名称保存文件。
最好在文件中为文件分配唯一标识符,并使用相同的标识符作为文件名。
然后有一个下载页面,从数据库中检索文件路径和原始名称,并将其发送给readfile
的用户并设置相关标题:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file_path));
ob_clean();
flush();
readfile($file_path);
die();
从安全角度来看,这也更好,因为用户不再需要知道或访问服务器上的文件位置,因此如果他们上传任何恶意内容,他们将无法直接调用该文件。
修改:
要应用此功能,您需要拥有一个包含自动增量ID字段的文件上传表。
然后,您可以使用mysql_query
将原始文件名和其他相关信息插入数据库(因为您已在示例中使用它)。然后,您需要将查询传递到mysql_insert_id
,这将为您刚刚插入的行提供唯一标识符。使用此命名文件,然后在uploads文件夹中添加“.dat”扩展名。
在下载时,有一个下载页面,它通过查询字符串或post参数获取id,然后使用它来查找数据库中的信息。您可以找出给定ID的文件名,因为这是您用来存储它的首字母。
获得文件路径和原始名称后,您可以使用上面的代码向用户显示下载内容(将$file_name
和$file_location
替换为您自己的参数后,如果您将其称为其他内容)。
下载页面还需要处理是否允许用户下载文件的任何检查。