Tapestry 5.4中的Ajax文件上载

时间:2014-08-29 09:15:11

标签: java ajax upload tapestry

我有一个Tapestry Web应用程序。 要实现AJAXified文件上传,我使用下面显示的简单javascript(我已经为tapestry评估了现有的ajax-upload解决方案,但无法让它们工作):

var fileSelect = document.getElementById('file-select');
var files = fileSelect.files;
var formData = new FormData();
var file = files[0];
formData.append("file", file, file.name);
var xmlhttp;
if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        console.log(xmlhttp.responseText);
    } 
}
xmlhttp.open("POST", "FileUpload",true);
xmlhttp.send(formData);
}

FileUpload 页面中,我有:

@Inject
private Request request;

public Object onActivate() {
String fileName = request.getParameter("file");
String path = "c:\\tapestry_temp";
File file = new File(path, fileName);
if (file.exists()) {
System.out.println("File found");
} else {
System.out.println("File not found");
}
}
....

现在,当我上传文件时,javascript执行没有问题,并且在 FileUpload 页面中, fileName 具有正确的值(已上传的名称)文件),但我不知道如何访问上传的文件?它存放在哪里?

ps:在AppModule(ContributeApplicationDefaults)中,我有

configuration.add(UploadSymbols.REPOSITORY_LOCATION,"c:\\tapestry_temp");

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。

页面模板中的

<input type="file" id="fileUpload" name="fileUpload" />
<input type="button" id="fileUploadButton" onclick="return fileUpload();" value="Upload" />

javascript部分:

var fileSelect = document.getElementById('file_upload");
var files = fileSelect.files;
var file = files[0];
var formData = new FormData();
formData.append("file", file, file.name);
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        if(xmlhttp.responseText == "true") {
            return true;
        } else {
            return false;
        }
    } 
}
xmlhttp.open("POST", "Upload",true);
xmlhttp.setRequestHeader("Content-type","application/pdf");
xmlhttp.send(formData);

并在上传页面中:

    @Inject
private RequestGlobals requestGlobals;

public Object onActivate() {
    try {
        InputStream input = requestGlobals.getHTTPServletRequest().getInputStream();
        ...
        FileOutputStream output = new FileOutputStream(pdfFile);

        final int BUFFER_SIZE = 1024;
        byte[] buffer = new byte[BUFFER_SIZE];
        while (true) {
            count = input.read(buffer);
            if (count == -1) {
                break;
            }
            output.write(buffer, 0, count);
        }
        input.close();
        output.close();
        ....