2013-01-18 25 views
1

我是新來的Struts 2。現在在Web項目中開發一個畫廊頁面。因爲我必須在沒有頁面加載的情況下彈出圖片/音頻/視頻文件。我成功地在圖像&視頻文件工作正常,但沒有音頻文件。我的支柱行動如下。來自java的音頻流不工作,但視頻正常工作

<action name="download" class="com.mkyong.common.action.DownloadAction"> 
<result name="success" type="stream"> 
    <param name="contentType">application/octet-stream</param> 
    <param name="inputName">fileInputStream</param> 
    <param name="bufferSize">256</param> 
</result> 
</action> 

我的類文件是

try { 
fileInputStream = new FileInputStream(new File("E:\\ESS_GALLERY\\2451252452\\Gallery\\Audios\\audio_2.wav")); 
    } catch (Exception e) { 
     e.printStackTrace(); 
} 

和JSP(HTML)代碼

<object id='tempAud1' name="emQTPlayer" height="45px" width="120px" 
    style="behavior: url(#BinaryBehaviorID)" 
    codebase="http://www.apple.com/qtactivex/qtplugin.cab" 
    classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"> 
    <param name="autoplay" value="false" /> 
    <param name="src" 
     value="<s:property value="mediaAud[0].fileLocation"/>" /> 
    <param name="controller" value="true" /> 
    <param name="type" value="video/quicktime" /> 
    <param name="align" value="bottom" /> 
    <param name="border" value="0" /> 
    <%--<param name="wmode" value="transparent">--%> 
    <param name="showcontrols" value="true"> 
    <embed id='tempAud2' name="emQTPlayer" type="video/quicktime" 
     autoplay="false" height="45px" width="120px" align="top" border="0" 
     controller="true" postdomevents="true" 
     pluginspage="http://www.apple.com/quicktime/download/" 
     showcontrols="true" src='' /> 
</object> 

。 因爲我會在onclick事件中設置src ...

+0

當你在輸入在瀏覽器中的操作是否會返回音頻文件?那可以將它保存到磁盤並播放它嗎?如果您不能解決問題,那麼瀏覽器/標籤無法處理內容類型,或者標籤的參數不正確。 – Quaternion

+0

當我在瀏覽器中直接下載download.action時,它會要求將其下載爲download.action(因爲我沒有提供文件名附件參數),然後我打開任何媒體播放器,它工作正常..有沒有問題或任何特別的我必須爲音頻文件做?我見過一些頁面,Java不會支持這樣的許多音頻文件格式? – Ram

+0

那麼這些數據顯然是給你的......問題出在瀏覽器上,但服務器可能沒有足夠的幫助。該標籤清楚地說明了媒體類型,但是誰知道它仍然需要一個準確的MIME類型,因此請檢查服務器是否提供它也嘗試使用從本地源下載的文件「download.action」,並查看瀏覽器是否需要更多合理的文件擴展名我敢打賭,不同的瀏覽器在這個問題上會或多或少地靈活一些。 – Quaternion

回答

2

通過更改內容類型參數如下..

<action name="download" class="com.mkyong.common.action.DownloadAction"> 
     <result name="success" type="stream"> 
      <param name="contentType">audio/mpeg</param> 
      <param name="inputName">fileInputStream</param> 
      <param name="bufferSize">256</param> 
     </result> 
    </action> 

這工作正常音頻文件....

+0

哥倫布蛋...很好, +1 –

+0

+1我喜歡它,當人們找出答案併發布給其他人。 – Quaternion

0

您是不是提供源給<embed>對象是正常的嗎?

嘗試將其更改爲

<embed id='tempAud2' name="emQTPlayer" type="video/quicktime" 
    autoplay="false" height="45px" width="120px" align="top" border="0" 
    controller="true" postdomevents="true" 
    pluginspage="http://www.apple.com/quicktime/download/" 
    showcontrols="true" src='<s:property value="mediaAud[0].fileLocation"/>' /> 
+0

對不起Andrea Ligios,IE對象標籤src也將是一個空白的..我提到那裏錯了。只有在點擊時纔會設置src('http:// localhost:8080/propjectname/download.actio')以減少服務器負載。當它在IE,Firefox中爲圖像和視頻文件工作時,我有點困惑,爲什麼它僅僅通過音頻失敗? – Ram

+0

我希望它的拼寫錯誤,因爲它應該是'donwload.action',最後n。我並不完全明白你在做什麼,但我建議你先從一個最小的工作版本開始,然後再進行演出調整...... –

+0

這裏我提供了一個示例代碼,用於播放一個文件瀏覽器。但是當用戶點擊文件名文件時,彈出窗口會彈出一個文件名。這就是爲什麼我離開src空白,並在運行時分配它。我懷疑在JAVA中的音頻文件格式有任何問題? – Ram