2015-06-16 45 views
1

我正在使用recorder.js在我的网页上录制音频,它创建了一个代表wav文件的blob。我想将这个blob文件发送到我的c#服务器代码,以便我可以将其上传到我的azure存储。我在这方面做了很多研究,只能找到将blob发送到php的结果。到目前为止,这是唯一的代码,我能找到送斑点到后面的代码:如何将Javascript中的Blob文件传递给ASP.net中的服务器代码

function upload(blob) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', './addRecord.aspx', true); 
    xhr.onload = function (e) { 
     var result = e.target.result; 
    }; 
    xhr.send(blob); 
} 

然后在后面的Page_Load功能我addRecord.aspx代码,我有:

Request.SaveAs(Server.MapPath("file.wav"), false); 

当我检查我保存的文件,我无法打开任何文件。该文件似乎已损坏,所以我认为我无法成功传递文件。我也听说使用ajax很容易做到,但我不知道如何实现它。我很乐意就如何做到这一点提出任何想法。

+0

如果这个工程的一个PHP脚本,您的服务器端代码是错误的。 – CodeCaster

+1

可能重复[如何异步上传文件?](http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously) – Knelis

回答

0

您可以使用此技术:

的Base-64

您可以阅读使用JavaScript的FileReader API从WAV文件中的内容,接下来编码的二进制内容到BASE-64通过这像字符串字符。

接下来的是一个简单的例子:

<input type="file" id="files" name="file" /> 

<script> 
    function handleFileSelect(evt) { 
     var files = evt.target.files; // FileList object 

     // Loop through the FileList and render image files as thumbnails. 
     for (var i = 0, f; f = files[i]; i++) { 
      // Only process audio files. 
      if (!f.type.match('audio.*')) { 
       continue; 
      } 

      var reader = new FileReader(); 

      // Closure to capture the file information. 
      reader.onload = (function(theFile) { 
       return function(e) { 
        var xhr = new XMLHttpRequest(); 
        xhr.open('POST', './addRecord.aspx/MyPostMethod', true); 
        xhr.onload = function (e) { 
         var result = e.target.result; 
        }; 
        xhr.send('{"blob":"' + e.target.result + '"}'); 
       }; 
      })(f); 

      // Read in the image file as a data URL. 
      reader.readAsDataURL(f); 
     } 
    } 

    document.getElementById('files').addEventListener('change', handleFileSelect, false); 
</script> 

结果是得到这样的Base-64编码

我希望这可以帮助您

相关问题