2013-04-29 99 views
0

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

检票代码:

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) 

所以我有两个问题:

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

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

回答

1

您应该将资源安装到"home/myuser/${name}",请阅读this acticle以了解详细信息。

您可以用下面的代码(在本例中没有缓存)调整缓存:

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

要允许特定扩展名的检查这些资源:

+0

它创建的网址很好,但返回相同的404错误。我如何检查资源是否映射良好? – andriy 2013-04-29 10:17:04

+0

您的资源类是否已被调用?放一个断点来检查这个。如果你分享更多的代码,它会更容易帮助你。 – 2013-04-29 10:33:05

+0

是的,它被称为。我已经解决了这个问题。我不知道为什么在函数'getImageAsBytes()'中,你写的文章不可能用'.jpg'扩展名来写图像。当我将扩展名更改为'.jpeg'时,它起作用了!我拥有的另一个问题是浏览器缓存!现在我需要找到如何仅为此映像停用缓存。谢谢你的帮助! – andriy 2013-04-29 12:17:09

2

有几件事情要考虑你的方法:

  • 逃逸文件名
  • Web服务器(在这种情况下的tomcat /小门),最有可能无法从某些文件服务解决方案任意目录

您应该实现一个资源,将图像传回并将此资源挂载为阿列克谢指出。

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

相关问题