基于此链接中的代码http://webaudiodemos.appspot.com/AudioRecorder/index.html,我正在进行更改,通过URL传递sessionId将录制的音频文件发送到服务器。php页面是http://xxxxx/abc.php?sessionId=Sam.PHP版本:PHP 5.4 PHP 5.5.22。我使用的是这个链接中的第二个方法:如何将变量和数据从PHP传递到JavaScript?。abc.php页面引用了一些JS代码,就像上面链接中的index.html一样。abc.php页面使用以下代码正确处理URL值:
<div id="bottom">
<?php
$faid = $_GET["sessionId"];
echo htmlspecialchars($faid); // tested working
?>
</div>
在recorder.js JavaScript上,我有一个函数,它试图在将音频文件上传到服务器的同时将URL值传递给另一个PHP-没有传递fname。。。看起来。。xhr.send(blob)还能发送fname吗?
Recorder.setupDownload = function(blob){
var div = document.getElementById("bottom");
var fname = div.textContent;
var xhr = new XMLHttpRequest();
xhr.open('POST', "./uploads.php?" + fname, true);
xhr.onload = function(e) {};
// Listen to the upload progress.
var progressBar = document.querySelector('progress');
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
progressBar.value = (e.loaded / e.total) * 100;
progressBar.textContent = progressBar.value; // Fallback for unsupported browsers.
}
};
xhr.send(blob);
服务器中的uploads.php有以下脚本来接收值并创建音频文件,但它并没有创建音频文件。但是,如果我修复了文件名(例如:"filename123"),它会写入音频文件,所以问题在于传递变量名。我是一个新手,我想知道我缺少什么?:
<?php
ini_set("display_errors", true);
error_reporting(E_ALL);
if(isset($_GET['fileId']) && !empty($_GET['fileId'])){
$id = $_GET["fileId"];
}
$fp = fopen( $id, 'wb' ); // writes the audio file
fwrite( $fp, $GLOBALS['HTTP_RAW_POST_DATA'] );
fclose( $fp );
?>
更新:它正在工作!
您没有给值命名,所以您传递的值将在每页中显示为"不同"键。
例如,你的每个用户都会有类似的东西
http://example.com?foo
http://example.com?bar
导致了PHP中的CCD_ 1和CCD_。但是由于foo/bar是代表会话ID的一些随机值,你不知道这个值会是什么。所以…给它一个名字:
http://example.com?key=foo
现在,您只需执行$key = $_GET['key']
,就可以始终访问会话值,无论它的实际值是什么,它都将始终分配给key
。