javascript - 使用PHP保存未知文件名的文件

标签 javascript php audio jspsych

我正在开展一项在线实验(使用 jsPsych 库),参与者(每个参与者都有一个由脚本随机分配的代码)将录制许多 .wav 文件。然后,我想上传到服务器,其名称包括参与者的代码号和与该记录关联的项目号。每个参与者将创建类似 36 个不同的短 .wav 文件。

它看起来像 recorderjs 和 recordermp3.js是我在浏览器端录制音频所需的内容(请参阅 RecorderJS uploading recorded blob via AJAX ),但是我很难找到创建一个 PHP 脚本来保存未知文件名的文件所需的信息.

这是相关的 JavaScript:

function stopRecording(subjectID, item_number) {
    recorder && recorder.stop();
    console.log('Stopped recording.');
    recorder && recorder.exportWAV(function(blob) {
        var xhr=new XMLHttpRequest();
        xhr.onload=function(e) {
            if(this.readyState === 4) {
                console.log("Server returned: ",e.target.responseText);
            }
        };
        var fd=new FormData();
        fd.append(subjectID + item_number + ".wav", blob);
        xhr.open("POST","upload_wav.php",true);
        xhr.send(fd);
    };
    recorder.clear();
}

这是迄今为止我对 PHP 的了解:

<?php
    $target_dir = 'audio/';
    $target_file=$target_dir . basename[$_FILES["fileToUpload"]["name"];
    move_uploaded_file($_FILES[“fileToUpload”][“tmp_name”], $target_file);
    chmod($target_file,0755);
?>

我的问题与 Saving WAV File Recorded in Chrome to Server 非常相似和 HTML5 & getUserMedia - Record Audio & Save to Web Server after Certain Time 但不同之处在于我不知道上传文件的文件名是什么,并且我想使用 PHP(主要是因为有人告诉我这样做)。我可以使用什么来代替 php 脚本中的“fileToUpload”,以使该脚本适用于发送给它的任何 .wav 文件?

如果您还没有猜到我在上个月左右的时间里已经学会了有关 javascript 和 PHP 的所有知识,所以请对 n00b 保持温柔。我查看了各种 PHP 教程和文档,但似乎没有找到我想要的东西。代码将不胜感激。

最佳答案

首先,您应该添加一些检查以确保您不会被帖子淹没。做到这一点的最小方法是确保 POST 来自同一服务器 IP(尽管有多种方法可以欺骗):

if ($_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) {
    http_response_code(403);
    die('Forbidden');
}

此外,请确保仅在实际收到文件时才执行此脚本>

if (!$_FILES) {
    http_response_code(400);
    die('File missing');
}

至于您的文件名问题:您一次仅上传一个文件,因此 $_FILES 将只有一个可以使用 current() 检索的元素。

$target_dir = 'audio/';
$file = current($_FILES);
$target_file = $target_dir . basename($file['name']);
move_uploaded_file($file['tmp_name'], $target_file);
// why would you do this?
chmod($target_file,0755);

关于javascript - 使用PHP保存未知文件名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621135/

相关文章:

php - 数据库访问的用户管理

php - mysql中的有限总和

vb.net - vb.net服务提示音

javascript - Node.js, express, Passport 认证 "Bad Request"

javascript - 如何通过 javascript 在 HTML5 Canvas 中应用图像的宽度

javascript - 使用 HOC 返回的组件将属性传递给组件会导致错误

javascript - 将默认值分配给页面加载时加载的 .click 函数

php - 获取子目录下的所有文件

c++ - 如何使用Opus编码和解码音频数据?

java - 通过按钮事件停止声音