2012-10-31 3 views
5

Ich versuche, ein Lied zu Soundcloud mit der Souncloud-API und Javascript hochladen. Aber ich scheine es nicht zu tun. Dies ist mein JavascriptHochladen von Lied auf Soundcloud-Konto mit 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 
      } 
     }); 
    }); 
} 

Und das ist mein HTML

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

ich keine Fehler auftreten, so kann mir jemand Punkt in, was im falsch?

+0

Haben Sie versucht, durch den Debugger treten? Ich bin nicht vertraut mit der API, aber vielleicht gibt es einen "onSuccess" und "onError", sogar Sie können erfassen, wie mit den Jquery Ajax-Aufrufe, die Sie erfassen können, um zu sehen, was vor sich geht. – spots

Antwort

2

Von: http://developers.soundcloud.com/docs/api/guide#uploading

// 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); 
      } 
      }  
    }); 

So können Sie nicht direkt den Track mit Javascript laden.

+0

Es scheint mir, dass ist veraltet, kann Javascript theoretisch Zugriff auf die Dateien durch die DateienApi in HTML 5 ... Ich habe gerade einen direkten Uploader auf Youtube mit dem, wäre es toll, wenn ich das gleiche erreichen könnte mit SoundCloud ... –

1

Ich wollte schließlich auch Audiodateien über Javascript SDK hochladen, also habe ich die PHP- und JS-SDKs rückentwickelt, damit es funktioniert.

Zuerst sollten Sie sicherstellen, dass das JavaScript SDK funktioniert. Wir verwenden es nur für das Authentifizierungstoken (mit einer undokumentierten Methode). Abgesehen von dem Token wird der Rest manuell unter Verwendung von $.ajax und einem FormData Objekt behandelt.

HTML:

<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> 

Javascript:

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(); 
});