我正在使用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)