Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript将歌曲上载到Soundcloud帐户_Javascript_Soundcloud - Fatal编程技术网

使用javascript将歌曲上载到Soundcloud帐户

使用javascript将歌曲上载到Soundcloud帐户,javascript,soundcloud,Javascript,Soundcloud,我正在尝试使用SounClud API和javascript将一首歌曲上传到soundcloud。但我似乎做不到。这是我的javascript function ADDTRACK() { var test = document.getElementById('SongTrack').files[0]; SC.get("http://api.soundcloud.com/users/redstr/tracks.json?client_id=3200814596a029b47877e

我正在尝试使用SounClud API和javascript将一首歌曲上传到soundcloud。但我似乎做不到。这是我的javascript

function ADDTRACK() {
    var test = document.getElementById('SongTrack').files[0];
    SC.get("http://api.soundcloud.com/users/redstr/tracks.json?client_id=3200814596a029b47877e63edfe6066c", {
        limit: 1
    }, function(tracks) {
        SC.POST({
            tracks: {
                description: 'This track was recorded in Berlin',
                asset_data: '@' + test
            }
        });
    });
}
这是我的HTML上传

  <input type="file" id ="SongTrack" name="pic" accept="audio/*" />
      <button type="button"   onclick="ADDTRACK()" />Add TRACK</button>

添加曲目
我没有错误,所以有人能指出我做错了什么吗?

来自:


所以你不能直接用javascript上传曲目。

我最后还想通过javascript SDK上传音频文件,所以我对PHP和JS SDK进行了反向工程以使其正常工作

首先,您应该确保Javascript SDK正常工作。我们仅将其用于身份验证令牌(使用未记录的方法)。除了令牌之外,它的其余部分是使用
$.ajax
FormData
对象手动处理的

HTML:


您是否尝试过单步执行调试器?我不熟悉API,但可能有一个“onSuces”和“onError”甚至你可以捕获,比如Jquery Ajax调用,你可以捕获它来查看发生了什么。在我看来,虽然这已经过时了,Javascript理论上可以通过html 5中的FileAPI访问文件。。。我刚刚用它直接上传到Youtube,如果我能用SoundCloud实现同样的效果就太好了。。。
// the JavaScript SDK does not by itself have access
// to the filesystem, so instead this example records
// some audio in the browser and uploads it.

        SC.connect(function() {
          SC.record({
            start: function() {
              window.setTimeout(function() {
                SC.recordStop();
                SC.recordUpload({
                  track: { title: 'This is my sound' }
                });
              }, 5000);
            }
          }    
    });
<script src="//cdn.jsdelivr.net/jquery/1.8.3/jquery-1.8.3.min.js"></script>
<script src="//connect.soundcloud.com/sdk.js"></script>
<button id="login">log in</button>
<form>
    <label>Title: <input name="title" disabled /></label><br>
    <label>File: <input name="file" type="file" accept="audio/*" disabled /></label><br>
    <button type="submit" disabled >Submit</button>
</form>
SC.initialize({
    client_id: "INSERT_CLIENT_ID",
    redirect_uri: "INSERT_REDIRECT_URI"
});

$("#login").click(function(){
    SC.connect(function(){
        $('form input,form button').removeAttr('disabled');
    });
});

$('form').submit(function(e) {
    var fd = new FormData();
    fd.append('oauth_token', SC.accessToken());
    fd.append('format','json');
    fd.append("track[title]", $(this).find('input[name=title]').val());
    fd.append("track[asset_data]", $(this).find('input[name=file]').prop('files')[0]);

    $.ajax({
        url: 'https://api.soundcloud.com/v1/tracks',
        type: 'POST',
        data: fd,
        processData: false,
        contentType: false,
        xhr: function() {
            var xhr = $.ajaxSettings.xhr();
            xhr.upload.onprogress = function(e) {
                if(e.lengthComputable) {
                    var percent = Math.floor((e.loaded / e.total) * 100);
                    console.log(percent  + '% uploaded');
                }
            };
            return xhr;
        }
    }).done(function(e) {
        console.log('Upload Complete!');
        console.dir(e); // This is the JSON object of the resulting track
    });
    e.preventDefault();
});