PHP $ _FILES不允许上传音频文件(wav,mp3,aiff等)-但允许任何其他类型的扩展名

时间:2018-10-30 12:14:52

标签: javascript php

我的问题


因此,我一直在尝试使用 JavaScript (XHR)和 PHP 创建一个简单的文件上传系统,并且遇到了一个问题,即一旦将文件上传到 PHP handler,它总是返回未设置$_FILES的{​​{1}}。

代码


JavaScript (在服务器www.example.com上):

var file = document.getElementById("fileInput").files[0];

var formData = new FormData();
    formData.append("track", file);

var xhr = new XMLHttpRequest();
    xhr.open("POST", "//handle.example.com/uploads.php", true);

xhr.onload = function(){
    if(xhr.status == 200)
        // awesome, it worked
    else
        return console.error("Something went wrong.");
};
xhr.send(formData);

PHP (在服务器handle.example.com上):

header("Access-Control-Allow-Origin: http://www.example.com", false);

if(isset($_FILES["track"])){
    $file       = $_FILES["track"];
    $fileTemp   = $file["tmp_name"];
    $fileSize   = filesize($fileTemp);

    if($fileSize <= 150000000)
        $data = "Success"; // this is returned if a file is an image file
} else
    $data = "File not set."; // this is returned if a file is an audio file

echo $data;
exit;

HTML (在服务器www.example.com上):

<form method="post" enctype="multipart/form-data" id="ulF_uF1">
    <input type="file" name="file" accept="audio/x-aiff,audio/flac,audio/mpeg,audio/ogg,audio/wav" id="fileInput">
</form>

我尝试过的


  • 分别将upload_max_filesizepost_max_size分别设置为150M151M
  • 更改字段名称的名称
  • $_FILES更改为$_POST

这些都不对我有用,而且我似乎找不到其他与我的问题有关的可行解决方案,因此我们将不胜感激。

更新:


经过仔细的测试,我意识到我的上传脚本实际上运行良好。它不喜欢正在上传的文件类型。由于某些原因, PHP(至少是7.2.1版)不喜欢我上传音频文件的过程;上传图像文件或PDF正常。

1 个答案:

答案 0 :(得分:1)

xhr.setRequestHeader("Content-Type", "multipart/form-data");

格式为Content-Type的请求的multipart/form-data标头必须包含一个boundary参数,以告知消息的接收者每新的数据位从哪里开始

通过手动提供不带标题的标题,您将使请求无法解析。

删除该行。允许XMLHttpRequest使用FormData对象为您生成正确的内容类型标头。