我正在使用playframework來構建網站。我還使用了一個名爲xheditor的豐富編輯器。使用不同瀏覽器在playframework中上傳文件
Xheditor支持ajax-fileuploading,它需要服務器端有一個動作,它接受包含上傳文件的「filedata」參數。
所以我寫了一個上傳動作:
public class Application extends Controller {
public static void upload(File filedata) {
// the filedata should not be null
renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}");
}
}
它在IE6中正常工作,該FILEDATA不爲空,並且包含正確的數據。但是,如果我使用chrome或firefox,那麼這個題目是null !!
我使用Firebug監控螢火蟲提交什麼,並發現它提出這樣一個標題:
content-disposition
attachment; name="filedata"; filename="051111twdns.zip"
我覺得該劇沒有正確處理這種情況下,這樣的參數「FILEDATA」爲空。
爲了與Chrome和Firefox的工作,我修改了行動:
public class Application extends Controller {
public static void upload(File filedata) {
if(filedata!=null) {
// ok, it's IE6
renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}");
} else {
// it's chrome or firefox, the data is in request.body
File targetFile = new File("upload/test.zip");
IOUtils.copy(request.body, new FileOutputStream(targetFile));
}
}
}
這在IE6,Chrome和Firefox的工作現在,但,只有當上傳文件是非常小的。例如。小於4K。如果它稍大一些,例如12K,方法「IOUtils.copy」將報告「讀取錯誤!」,就連下面的代碼將報告此類錯誤:
request.body.available()
request.body.read()
request.body.read(bytes)