我有一个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");
提前致谢。
答案 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();
....