将blob文件保存到服务器

save blob file to server

本文关键字:服务器 保存 文件 blob      更新时间:2023-09-26

我正在尝试将录制的文件保存到服务器。为了录音的目的,我正在使用演示记录器

在录制结束时,它会给我一个指向录制文件的blob链接。所以在谷歌上搜索了一点之后,我发现我可以使用bob url来保存它。
这是一个关于拯救斑点的链接。在那之后,我试着把它下载到服务器上。

1-我得到了blob文件的链接

var data = document.getElementById("save").href

之后我在index.html文件中使用js代码发送
blob url到php代码
JS代码

<script>
function saveAudio(){
var req = null;
var url = "savefile.php";
var data = document.getElementById("save").href.toString();// document.getElementById("save").innerHTML;// = xhttp.responseText;;   // you have to check how to get the data from your saveAudio() method
window.alert(data);
(window.XMLHttpRequest) ? req = new XMLHttpRequest() : (window.ActiveXObject) ? req = new ActiveXObject("Microsoft.XMLHTTP") : req = false; 
req.open("POST", url, true);
req.setRequestHeader("Content-Type", "multipart/form-data");
if(data != null) //&& data != "")
{
  req.setRequestHeader("Content-length", data.length);
  req.send(data);
}}

</script>

PHP代码

<?php
$save_folder = dirname(__FILE__) ."/js";
if(! file_exists($save_folder)) {
    if(! mkdir($save_folder)) {
        die("failed to create save folder $save_folder");
    }
}
$key = 'filename';
$tmp_name = $_FILES["audiofile"]["tmp_name"];
$upload_name = $_FILES["audiofile"]["name"];
$type = $_FILES["audiofile"]["type"];
$filename = "$save_folder/$upload_name";
$saved = 0;
if(($type == 'audio/x-wav' || $type == 'application/octet-stream') && preg_match('/^[a-zA-Z0-9_'-]+'.wav$/', $upload_name) ) {
    $saved = move_uploaded_file($tmp_name, $filename) ? 1 : 0;
}
//name is needed to send in the php file
?>

在浏览器中编译时出现2个错误
1-拒绝设置不安全的标头"内容长度"
2-POST保存文件.php 500

我想php文件有问题!
如何处理这些错误并完成上传任务?
是否有任何开放源代码允许在不使用php的情况下直接将blob url上传到服务器
我感谢任何帮助和建议!

尝试删除该行:req.setRequestHeader("内容长度",data.length);

XMLHttpRequest不允许设置这些标头,因为这将是一个安全漏洞。500很可能是请求失败的结果。

您可以在此处阅读有关XMLHttpRequest的信息http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29方法

以下是其他一些线程,相同的问题:

通过ajax传递Blob以生成文件

javascript如何上传blob?