2011-06-07 129 views
2

我正在使用GWT Web應用程序,用戶正在推送更新(如twitter)。更新是文本+附件。我希望用戶輸入更新,可以選擇點擊上傳按鈕,這會彈出一個瀏覽文件,然後在完成後最後點擊「發送更新」按鈕。文本+附件將被存儲在mysql中的一行中。文本作爲ususal varchar和文件作爲blob。文件大小會很小。使用GWT和對話框瀏覽文件的文件上傳

我對目前如何實現這一點無能爲力。看着API和谷歌搜索,我發現正在使用「FileUpload」小部件。文檔說它用於與FormPanel一起使用。我不確定我是否真的瞭解了整個事情,並且如何將其應用於我的案例。

我該如何解決我的問題?

回答

5

瀏覽器上傳文件的典型方法是使用輸入type='file'表單字段。沒有形式,無法使用AJAX上傳文件。至少我找不到任何東西。我認爲,這是一個安全措施。

因此,要使文件上傳可用,您必須提供一個帶有file輸入的表單。表格必須通過常規請求提交,而不是AJAX。

所以你必須定義FormPanel並添加FileUpload它。示例:

final FormPanel form = new FormPanel(); 
form.setAction("my.action"); 
// Because we're going to add a FileUpload widget, we'll need to set the 
// form to use the POST method, and multipart MIME encoding. 
form.setEncoding(FormPanel.ENCODING_MULTIPART); 
form.setMethod(FormPanel.METHOD_POST); 
// Create a FileUpload widget. 
fileUpload = new FileUpload(); 
fileUpload.setName("fileUpload"); 
form.add(fileUpload); 
// Add other components to form 

其他組件將包括用戶文本輸入。可能有不同的處理方法,但我認爲最好的辦法是通過相同的表單提交來處理它們。

現在,你必須添加一些東西來觸發表單提交。

submitButton = new Button("Upload", new ClickHandler() { 
    public void onClick(ClickEvent event) {    
     form.submit(); 
    } 
}); 
formPanel.add(submitButton); 

最後,您必須處理上傳。你可以用多種方式做,但它必須是常規的請求處理,而不是通過AJAX或GWT。我個人喜歡使用Spring MVC。但是你可以使用你的選擇框架。這裏我不打算討論細節。如果你願意,你可以編寫Perl腳本。

這種方法還有其他選擇。您可以使用Flash,您可以使用Adobe AIR,並且可能有其他方法。在不同的圖書館中有這些方法的小部件。檢查這個站點:http://google.wikia.com/wiki/Google_Web_Toolkit

聲明:這是我使用的方法。我可能錯過了一些東西,也可能有其他方法,我很想了解。