2012-07-31 61 views
3

我允許我的用戶上傳MP3文件,以便我可以讀取元數據並提取歌曲標題和歌手名稱。是否有可能從客戶端上的文件獲取信息而無需上傳文件?

目前我正在上傳文件並使用getId來讀取元數據。當然上傳需要很多資源和帶寬。上傳這些mp3看起來有點浪費,因爲我需要的只是2段信息,我甚至不會對文件本身做任何事情。所以我之後刪除它。

是否可以在客戶端獲取這2條信息而無需將文件複製到我的服務器?

回答

4

你只能做這在實現的FileReader接口(火狐,Chrome,IE10,Safari瀏覽器5.1及更高版本,不知道Opera)的HTML5兼容的瀏覽器。

你基本上使用FileReader來獲取你的文件的內容到內存中,然後手動掃描(在客戶端JavaScript)爲你想要的MP3標籤。

+0

不錯,我想我可以實現這一點,並使用上傳方法作爲非投訴瀏覽器的後備。謝謝。 – TK123 2012-08-01 00:20:12

+0

實際上,通過調查,似乎不允許檢測元數據。如果我console.log()文件對象,我可以看到像文件大小和類型但沒有元數據的信息。 – TK123 2012-08-01 00:32:00

+0

你沒有console.log文件對象,你使用FileReader返回的數據 – gonchuki 2012-08-01 00:58:33

0

您只能從客戶端文件獲取信息,方法是上載並在服務器上處理它(您不想執行的操作),或者分發客戶端來處理客戶端上的文件並只上傳相關信息。選項2要求您開發(或共同選擇)客戶端應用程序並分發它。

0

這樣你的意思是:工作演示http://jsfiddle.net/9pfLJ/

很好的鏈接:http://jquerybyexample.blogspot.com/2012/03/how-to-check-file-size-before-uploading.html

http://www.aibn.com/help/Learn/mimetypes.html

希望它可以幫助你的事業:),其餘隨意玩的演示。

P.S. - 在演示中它也會提醒文件名稱。

代碼

$(document).ready(function() { 
    $("#flUpload").change(function() 
    { 
    var iSize = ($("#flUpload")[0].files[0].size/1024); 

    alert("Name of file ===> " + $("#flUpload")[0].files[0].name); 

    if (iSize/1024 > 1) 
    { 
     if (((iSize/1024)/1024) > 1) 
     { 
      iSize = (Math.round(((iSize/1024)/1024) * 100)/100); 
      $("#lblSize").html(iSize + "Gb"); 
     } 
     else 
     { 
      iSize = (Math.round((iSize/1024) * 100)/100) 
      $("#lblSize").html(iSize + "Mb"); 
     } 
    } 
    else 
    { 
     iSize = (Math.round(iSize * 100)/100) 
     $("#lblSize").html(iSize + "kb"); 
    }  
    }); 
});​ 
+0

不完全,這給出文件名稱和大小,但這不是來自元數據。所以名字可能不正確,我沒有得到歌手的名字。無論如何,這實際上是爲什麼我認爲有可能獲得更多信息的方式,因爲可以在不上載到服務器的情況下獲取名稱和文件大小。 – TK123 2012-07-31 23:39:38

相關問題