通过ajax从谷歌应用引擎blobstore获取mp3数据

时间:2012-03-29 07:02:35

标签: google-app-engine jquery

我正在尝试将音频文件存储在Google App引擎的blobstore中,并在浏览器中播放它们。我遇到的问题是我在浏览器中获得的数据是实际的mp3数据。我期待得到一个url来在blobstore中播放mp3。所以,我的问题是,我需要更改什么来获取一个url来播放blob而不是音频数据?

这是我的服务器端处理程序。

class ServeBlobHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):

    user = users.get_current_user()
    query = db.GqlQuery("SELECT * FROM AudioData Where userId = :1", user.user_id())

    results = query.fetch(limit=300)
    for dStoreEntry in results:

        entityBlobInfo = dStoreEntry.audioBlob

    self.send_blob(entityBlobInfo)

这是客户方。

$.ajax({
    url : '/serve_blob/audio/',
    type : 'GET',
    dataType : 'text',
    success : function(data) {
        alert('GET, audio data : \n '+ data );
    }
});

3 个答案:

答案 0 :(得分:0)

您的浏览器为mp3请求获取了哪个Content-type标头?我猜它是application/octet-stream

了解Blobstore文档关于上传的内容:

If you don't specify a content type, the Blobstore will try to infer it from the 
file extension. If no content type can be determined, the newly created blob is 
assigned content type application/octet-stream

转到GAE管理页面并检查Blob Viewer以查看为您的mp3文件分配的内容类型。

答案 1 :(得分:0)

您当前从获取数据的网页的网址是 MP3的网址。你需要使用某种基于网络的播放器来播放它。

答案 2 :(得分:0)

获取JPlayer - http://www.jplayer.org/

然后你的例子应该可以正常工作。我们在java中使用appengine blobstore,它很棒。来自blobstore的url将在jplayer中工作。

如果您重写它们以删除任何查询参数并为自己节省服务每个流的成本,您还可以在blob网址上设置缓存标头。