use*_*799 8 javascript php arrays validation file-upload
我有一个包含3个单独文件输入字段的表单.在将它们上传到服务器之前,我似乎无法找到单独验证其MIME类型的方法.(前两个应该只允许MP3文件,而最后一个只允许JPEG文件.)
我该怎么做,或者最好在上传文件后检查MIME类型,然后保留它,或者删除它并返回错误信息?
这是我的代码:
<form action="upload.php" method="post" enctype="multipart/form-data">
<div class="col-2">
<label>
Full MP3 file
<input type="file" name="file_array[]" id="file_array[]" tabindex="1" required>
</label>
</div>
<div class="col-2">
<label>
Sample MP3 file (30-45 seconds)
<input type="file" name="file_array[]" id="file_array[]" tabindex="2" required>
</label>
</div>
<div class="col-2">
<label>
JPEG Cover Art ( Recommended 400 x 400 px)
<input type="file" name="file_array[]" id="file_array[]" tabindex="3" required>
</label>
</div>
<div class="col-2">
<label>
<progress id="progressBar" value="0" max="100" style="width:100%;"> </progress>
</label>
</div>
<div class="col-submit">
<input type="submit" value="Upload" class="submitbtn" onclick="uploadFile()">
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
这是upload.php
if(isset($_FILES['file_array'])){
$name_array = $_FILES['file_array']['name'];
$tmp_name_array = $_FILES['file_array']['tmp_name'];
$type_array = $_FILES['file_array']['type'];
$size_array = $_FILES['file_array']['size'];
$error_array = $_FILES['file_array']['error'];
for($i = 0; $i < count($tmp_name_array); $i++){
if(move_uploaded_file($tmp_name_array[$i], "../artists/$id/temp/".$name_array[$i])){
echo $name_array[$i]." upload is complete<br>";
} else {
echo "move_uploaded_file function failed for ".$name_array[$i]."<br>";
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我认为您可以在客户端使用验证来使体验更加流畅。正如 Mario 指出的,您可以使用类似的方法来仅接受 mp3 文件:
<input type="file" accept=".mp3" name="file_array[]" id="file_array[]" tabindex="1" required>
Run Code Online (Sandbox Code Playgroud)
但由于您不能信任用户数据,因此还必须添加服务器端验证。例如:
if(isset($_FILES['file_array'])){
$name_array = $_FILES['file_array']['name'];
$tmp_name_array = $_FILES['file_array']['tmp_name'];
$type_array = $_FILES['file_array']['type'];
$size_array = $_FILES['file_array']['size'];
$error_array = $_FILES['file_array']['error'];
for($i = 0; $i < 3; $i++){
if ($i == 2){
if($type_array[2] != 'image/jpeg'){
echo 'Invalid file type: ' . $type_array[2];
break;
}
}
else {
if($type_array[$i] != 'audio/mp3'){
echo 'Invalid file type: ' . $type_array[$i];
break;
}
}
if(move_uploaded_file($tmp_name_array[$i],"../artists/$id/temp/".$name_array[$i])){
echo $name_array[$i]." upload is complete<br>";
} else {
echo "move_uploaded_file function failed for ".$name_array[$i]."<br>";
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试了上面的代码,它似乎对我有用。
笔记:
如果您已经知道上传文件的数量,请不要使用count,因为这可能会导致风险,并且如果您希望一次上传的文件数量是可变的,那么请确保结果count不超过最大值。也使用count循环外部,因此只计算一次。
还有其他更严格的方法来验证文件类型,但这就是我现在得到的。
希望这会有所帮助,如果我有任何错误,请提供反馈。
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |