我的网络应用程序在tomcat6上运行,我正在使用 Wicket 进行开发。
我要做的是将图像文件上传到服务器,并在上传后立即显示在网页上。我按照here描述通过AJAX上传文件。文件上传后会存储在/home/mysuser/
路径的磁盘上。上传文件时,我正在执行JavaScript,以便将该文件加载到HTML对象中:
Wicket代码:
protected void onSubmit(AjaxRequestTarget target, Form<?> form)
{
target.appendJavaScript("loadOriginalImage(\""+
(UPLOAD_FOLDER + TMP_FILE_NAME1)+"\")");
}
JavaScript代码:
function loadOriginalImage(image_path){
var curImg = new Image();
curImg.src = "file://"+image_path;
curImg.onload = function(){
imgHolder.appendChild(this);
}
}
文件上传得很好,但是当执行JavaScript时,会出现下一个错误:
Not allowed to load local resource
然后我尝试从JavaScript代码中删除"file://"
,因为我发现该文件是从客户端的本地文件夹中读取的,而不是从服务器中读取的。但是这次我有下一个错误:
GET http://localhost:8080/home/myuser/originalImg.jpg 404 (Not Found)
所以我有两个问题:
1。我如何在JavaScript中指定上传文件的正确路径?
2。将图片上传到服务器后,将图片加载到网页是否正确?
答案 0 :(得分:2)
您的方法需要考虑以下几点:
您应该实现一个资源,将图像流回来并按照Alexey的指示安装此资源。
确保您只提供图像文件,请确保禁用目录遍历,否则有人会弄清楚如何从文件系统中读取任何文件。
答案 1 :(得分:1)
您应该将资源安装到"home/myuser/${name}"
,阅读this以获取详细信息。
您可以使用以下代码调整缓存(示例中没有缓存):
@Override
protected void setResponseHeaders(ResourceResponse data, Attributes attributes) {
data.setCacheDuration(Duration.NONE);
super.setResponseHeaders(data, attributes);
}
要允许某些扩展程序,请检查以下资源: