0

我的 Web 应用程序在 tomcat6 上运行,我正在使用Wicket来开发它。我要做的是将图像文件上传到服务器并在上传后立即显示在网页上。我正在通过 AJAX 上传文件,如此所述。该文件被上传,它存储在磁盘的/home/mysuser/路径中。上传文件后,我正在执行 JavaScript 以将该文件加载到 HTML 对象中:

检票口代码:

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

然后我尝试"file://"从 JavaScript 代码中删除,因为我发现该文件是从客户端的本地文件夹中读取的,而不是从服务器的。但是这次我遇到了下一个错误:

GET http://localhost:8080/home/myuser/originalImg.jpg 404 (Not Found) 

所以我有两个问题:

1.如何在 JavaScript 中指定上传文件的正确路径?

2.我的策略是在上传到服务器后加载到网页的策略是否正确?

4

2 回答 2

2

您的方法需要考虑几件事:

  • 转义文件名
  • 网络服务器(在这种情况下为 tomcat/wicket)很可能无法从某个任意目录提供文件

正如 Alexey 指出的那样,您应该实现一个将图像流回并挂载该资源的资源。

确保只提供图像文件,确保禁用目录遍历,否则有人会弄清楚如何从文件系统读取任何文件。

于 2013-04-29T08:18:56.733 回答
1

您应该将 Resource 挂载到"home/myuser/${name}",请阅读文章了解详细信息。

您可以使用以下代码调整缓存(示例中没有缓存):

@Override
protected void setResponseHeaders(ResourceResponse data, Attributes attributes) {
    data.setCacheDuration(Duration.NONE);
    super.setResponseHeaders(data, attributes);
}

要允许某些扩展,请检查以下资源:

于 2013-04-29T04:30:47.693 回答