我想在图像上传到该指针之前创建一种通过Imagetype或类似变量来搜索目录的方法。
我的目标是使用php搜索该目录中的图像BLOB,如果任何结果匹配(意味着将重复上传相同图像),则返回“已上传文件”。
这只适用于图像文件......
以下是我认为我也可以添加的代码..
// Elements (values) of $_FILES['ImageFile'] array
//let's access these values by using their index position
$ImageName = str_replace(' ','-',strtolower($_FILES['ImageFile']['name']));
$ImageSize = $_FILES['ImageFile']['size']; // Obtain original image size
$TempSrc = $_FILES['ImageFile']['tmp_name']; // Tmp name of image file stored in PHP tmp folder
$ImageType = $_FILES['ImageFile']['type']; //Obtain file type, returns "image/png", image/jpeg, text/plain etc.
//Let's use $ImageType variable to check wheather uploaded file is supported.
//We use PHP SWITCH statement to check valid image format, PHP SWITCH is similar to IF/ELSE statements
//suitable if we want to compare the a variable with many different values
switch(strtolower($ImageType))
{
case 'image/png':
$CreatedImage = imagecreatefrompng($_FILES['ImageFile']['tmp_name']);
break;
case 'image/gif':
$CreatedImage = imagecreatefromgif($_FILES['ImageFile']['tmp_name']);
break;
case 'image/jpeg':
case 'image/pjpeg':
$CreatedImage = imagecreatefromjpeg($_FILES['ImageFile']['tmp_name']);
break;
default:
die('Unsupported File, Please Check File And Try Again!'); //output error and exit
}
答案 0 :(得分:2)
除此之外,还必须考虑这些系统:
在我必须设计的系统中,几年前,上传的文件只能在同一用户上更换,不同的用户可以上传完全相同的文件名或内容(必须将其链接到现有的文件名)避免重复数据),但如果内容不同,则文件必须以完全相同的名称存在两次(分配给两个不同的用户)。
Db表看起来像:
CREATE TABLE user_files (
id INT UNSIGNED NOT NULL PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
... -- other fields
filename VARCHAR(256) NOT NULL, -- the original file name
file_sha VARCHAR(40) NOT NULL, -- the content SHA1
file_md5 VARCHAR(16) NOT NULL, -- the content MD5
file_lnk VARCHAR(1024) NOT NULL, -- uniqid(sha1(originalFilename)) *
... --- other fields
)
[*] file_lnk
字段是服务器上的目标文件,包括基于某些启发式的计算路径
基本上,我在上传的文件中使用了sha1_file
和 md5_file
(直接在上传文件中),并在数据库中查找上传的文件;从数据库中查询SHA1或当前用户ID和文件名(即:SELECT ... WHERE file_sha = <computed_sha1> OR (user_id = <current_uid> AND filename = <uploaded_filename>)
)以检查是否有匹配,然后使用算法循环结果集以检查最佳匹配结果:
user_id
),则filename
仅在必要时更新file_lnk
)user_id
和filename
相同,则上传相同的文件名
file_lnk
并更新file_sha
和file_md5
。file_lnk
文件)