【问题标题】:Sending audio file created with RecordRTC to my server将使用 RecordRTC 创建的音频文件发送到我的服务器
【发布时间】:2017-03-13 13:22:32
【问题描述】:

我不熟悉使用 Javascript、PHP 和一般的服务器。我正在开发一个网页,该网页将使用 RecordRTC 录制来自用户的音频并将其保存到我的服务器。我对 XMLHttpRequest 部分有点困惑 - 如何更改以下代码以发送到我的服务器而不是 webrtc 服务器?

        function uploadToServer(recordRTC, callback) {
            var blob = recordRTC instanceof Blob ? recordRTC : recordRTC.blob;
            var fileType = blob.type.split('/')[0] || 'audio';
            var fileName = (Math.random() * 1000).toString().replace('.', '');

            if (fileType === 'audio') {
                fileName += '.' + (!!navigator.mozGetUserMedia ? 'ogg' : 'wav');
            } else {
                fileName += '.webm';
            }

            // create FormData
            var formData = new FormData();
            formData.append(fileType + '-filename', fileName);
            formData.append(fileType + '-blob', blob);

            callback('Uploading ' + fileType + ' recording to server.');

            makeXMLHttpRequest('https://webrtcweb.com/RecordRTC/', formData, function(progress) {
                if (progress !== 'upload-ended') {
                    callback(progress);
                    return;
                }

                var initialURL = 'https://webrtcweb.com/RecordRTC/uploads/';

                callback('ended', initialURL + fileName);

                listOfFilesUploaded.push(initialURL + fileName);
            });
        }

通过我的网络托管服务提供商,我使用的是 Apache 服务器、phpMyAdmin 和 mySQL 数据库。我只是替换

    makeXMLHttpRequest(https://webrtcweb.com/RecordRTC/

用“https://mywebsite.com”替换

    var initialURL = 'https://webrtcweb.com/RecordRTC/uploads/'; 

包含我为保存这些音频文件 (https://mywebsite.com/uploads) 而创建的文件的路径?然后给那个文件夹设置权限,允许公共写权限(这样好像不安全,有什么好的方法吗)?

这是 makeXMLHttpRequest 函数:

        function makeXMLHttpRequest(url, data, callback) {
            var request = new XMLHttpRequest();
            request.onreadystatechange = function() {
                if (request.readyState == 4 && request.status == 200) {
                    callback('upload-ended');
                }
            };

            request.upload.onloadstart = function() {
                callback('Upload started...');
            };

            request.upload.onprogress = function(event) {
                callback('Upload Progress ' + Math.round(event.loaded / event.total * 100) + "%");
            };

            request.upload.onload = function() {
                callback('progress-about-to-end');
            };

            request.upload.onload = function() {
                callback('progress-ended');
            };

            request.upload.onerror = function(error) {
                callback('Failed to upload to server');
                console.error('XMLHttpRequest failed', error);
            };

            request.upload.onabort = function(error) {
                callback('Upload aborted.');
                console.error('XMLHttpRequest aborted', error);
            };

            request.open('POST', url);
            request.send(data);
        }

【问题讨论】:

    标签: xmlhttprequest recordrtc


    【解决方案1】:
    1. 请确保您的 PHP 服务器在 SSL (HTTPS) 之上运行
    2. 创建一个目录并将其命名为uploadFiles
    3. 创建一个子目录并命名为uploads

    目录结构:

    https://server.com/uploadFiles           -> to upload files
    https://server.com/uploadFiles/uploads   -> to store files
    

    index.php

    现在在此路径上创建或上传以下index.php 文件:https://server.com/uploadFiles

    <?php
    // File Name: "index.php"
    // via https://github.com/muaz-khan/RecordRTC/tree/master/RecordRTC-to-PHP
    foreach(array('video', 'audio') as $type) {
        if (isset($_FILES["${type}-blob"])) {
    
            echo 'uploads/';
    
            $fileName = $_POST["${type}-filename"];
            $uploadDirectory = 'uploads/'.$fileName;
    
            if (!move_uploaded_file($_FILES["${type}-blob"]["tmp_name"], $uploadDirectory)) {
                echo(" problem moving uploaded file");
            }
    
            echo($fileName);
        }
    }
    ?>
    

    为什么是子目录?

    嵌套目录uploads 将用于存储您上传的文件。你会得到类似这样的 URL:

    https://server.com/uploadFiles/uploads/filename.webm
    

    较长的文件上传问题:

    upload_max_filesize 必须为 500MB 或更大。

    max_execution_time 必须至少为 10800(或更大)。

    建议修改php.ini,否则创建.htaccess

    如何链接自己的服务器?

    只需将https://webrtcweb.com/RecordRTC/ 替换为您自己的网址,即https://server.com/uploadFiles/

    【讨论】:

    • 感谢您的快速回复。我意识到我从演示页面复制了 HTML 和 JS 源代码,而不是使用 Github 存储库中的文件。那里的 index.html 没有 webrtc 链接 - 它指的是 save.php,这对我来说更有意义。我想我完成了所有这些步骤,但我不确定它是否正常工作,因为它设置为在窗口关闭时自动删除文件。我想保留存储在上传文件夹中的文件。我应该删除包含指向 delete.php 的链接的整个“window.onbeforeunload”函数以及“delete.php”本身吗?
    • 没关系,我自己发现删除“onbeforeunload”功能确实可以做到这一点。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多