当用户单击<input type="file">
HTML 中元素中的"浏览"按钮时,我想限制可从本机OS文件选择器中选择的文件类型.我有一种感觉,这是不可能的,但我想知道是否有是一个解决方案.我想完全依赖于HTML和JavaScript; 请不要闪光.
可能重复:
如何在PHP中检查上传文件的文件类型?
我在我的网站上传了功能,只允许pdf上传.如何检查上传的文件是否只是pdf.只是喜欢ckeck getimagesize()
图像文件.有没有办法检查文件肯定是PDF格式.我的代码如下所示.
$whitelist = array(".pdf");
foreach ($whitelist as $item) {
if (preg_match("/$item\$/i", $_FILES['uploadfile']['name'])) {
}
else {
redirect_to("index.php");
}
}
$uploaddir='uploads/';
$uploadfile = mysql_prep($uploaddir . basename($_FILES['uploadfile']['name']));
if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile)) {
echo "succussfully uploaded";
}
Run Code Online (Sandbox Code Playgroud)
在这redirect_to
,mysql_prep
并由我定义的功能.但是mime类型可以使用headers更改.所以有什么方法可以检查文件是orignal pdf吗?
我们可以在PHP中读取文件的头信息来确定上传的文件类型吗?
我不想依赖$_FILES['control_name_from_client']['type'].
我们知道这个属性通过读取上传文件的扩展名来确定文件类型.
如果什么用户重命名,比如test.jpg放在 - > TEST.XLS.在这种情况下,$_FILES['control_name_from_client']['type']
将显示类型为application/vnd.ms-excel而不是image/jpeg.如果必须执行代码来读取XLS文件以获取某些处理的数据,这很自然会产生问题.
有什么建议吗?
我有一个服务器脚本从 Javascript 接收上传的文件。
客户端,使用File
对象(来自W3C File API)和类似于此行的代码:
if (file.type.indexOf("text") == 0) { ... }
Run Code Online (Sandbox Code Playgroud)
可以检查文件类型。显然,这使用了MIME 类型(返回这些字符串)。
在我通过 SO 的旅程中,我冒险遇到了这个有价值的贡献者,他坚持认为 MIME 类型是无用的。
MIME 类型在文件上传情况下是否确实基本上没有用,因此应该在服务器端进行任何类型检查?
我在Angular JS中使用库Angular File Uploader。这filters
就是允许将文件类型设置为上载的方式。我这样做像:
uploader.filters.push({
name: 'imageFilter',
fn: function (item /*{File|FileLikeObject}*/, options) {
var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';
return '|doc|txt|docx|xml|pdf|djvu'.indexOf(type) !== -1;
}
});
Run Code Online (Sandbox Code Playgroud)
问题是用户可以更改扩展文件,例如,更改*.exe
为*.pdf
Angular Uploader并将其添加到队列上传之后。
以及如何在模板中显示信息,PDF和txt文件在哪里?
尽管未显示的$ _FILES数组,这是用于文件上传,我曾与文件上传的问题,所以我没能获得$ _FILES数组的[类型]的部分呢......但是这仅仅是一个简单的为什么这个功能不起作用的问题......
<?php
function getExtension() {
// global $testFile;
$extension = "./mp3/"; // also tried simply mp3 without the forwards slashes
$testFile = "song.mp3";
if(preg_match($extension, $testFile)) {
echo "match found";
}else {
echo "no match found";
}
}
getExtension();
?>
Run Code Online (Sandbox Code Playgroud)