2012-01-04 59 views
0

我正在使用java web服务(在tomcat上)。 我有下面的代码来处理图片上传:Webservice上传的图像url

public String uploadPicture( long xId, 
           int  pictureIndex, 
           String imageData) 
{ 
    File imageFile = new File(new String("D:\\" + xId + "_" + pictureIndex)); 

    try 
    { 
     FileOutputStream fos    = new FileOutputStream(imageFile); 
     byte[]    encodedImage = Base64.decode(imageData); 

     fos.write(encodedImage); 
     fos.close(); 
     return imageFile.getPath(); 
    } 
    catch(FileNotFoundException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch(Base64DecodingException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch(IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 
  1. 我指定的路径为d:\,因为它是在本地PC上。 但我需要更新它将部署它的服务器上的路径 - 然后应该将其更改为〜\ picDir?类似的东西?

  2. WebService的网址:http://192.168.0.11:8080/XWebService/services/XWebService 将被更新,以域名,而不是192.168.0.11 应该用什么URL来获取图像? (例如,如果图片文件夹为:〜\ picDir)

回答

2
  1. 如果目标服务器将运行Linux/Unix的,那么正确的路径应该是这样的/ usr /共享/ MYAPP。 '〜\'是完全错误的,我猜你的意思是'〜/',它会指向当前用户的主文件夹。应该避免这种情况,因为您可能将Web服务器作为具有不同主目录的不同用户运行。通常,在每个环境(开发人员机器,演示,活动服务器)上,您都应该有用于存储应用程序所需的配置和数据的位置。
  2. 您的图片的文件系统位置与照片所在的网址无关。它取决于Web Server(Tomcat,Jetty,JBoss等),它将运行你的应用程序和你的应用程序本身。例如,您可以配置Tomcat服务器将域www.myapp.com映射到/ var/lib/tomcat6/webapps/myapp /目录。将发布图像的Servlet可能会从1. =/usr/share/myapp/picDir中提到的配置目录中获取它们。如果可以通过/ pictures访问servlet?picId = 1,那么您可以在www.myapp.com/pictures?picId=1下找到它们。但是,如果您只是想将静态图像放入您的* .war文件以供浏览器访问,请将它们放在* .war文件的根目录中。

总结:

  1. 选择(并告诉我们)应用程序服务器
  2. 使用一些配置目录适用于所有环境和配置您的服务器能够看到它
  3. 配置您的服务器对于所需的域

您应该阅读更多关于* .war文件的上下文以及文件本身的组织方式。

谅解例如Tomcat的

的URL和背景假设:

  1. 在本地计算机所需的servlet位于:http://localhost:8080/myapp/utils/myservlet.html
  2. 您的应用打包为myapp.war
  3. 远程Tomcat具有IP 2.2.2.2并且正在端口8080上运行

当您将myapp.war部署到远程Tomcat到webapps目录(/ var/lib/tomcat6/webapps)时,它将被解压缩,您将能够看到您的servlet在http://2.2.2.2:8080/myapp/utils/myservlet.html之下。通过在Tomcat的服务器中配置您的应用程序。XML可以添加域名,并减少不必要的“myapp”部分称为上下文,有效地将URL保存为http://www.myapp.com/utils/myservlet.html。这是你在生产环境中想要的。这个主题在Tomcat的文档中有解释,请参考它。从Web应用程序

访问文件系统资源如果你想保存或从你的服务器的任何文件,请记住,客户端(网页浏览器)没有关于磁盘结构根本思想。浏览器使用它(在上传/下载方面)可以通过服务器这样的处理请求 - 响应通信模式:

  • 上传 - 抓住从请求一些字节的内容,并保存为上服务器文件系统中的文件
  • 下载 - 读服务器文件系统一些字节的内容和流它作为响应

正如你可以在这两种情况下,看到服务器文件系统为t的内部关注他服务于自己。你可以将它保存在你想要的任何地方您可以从任何位置读取字节。这就是为什么让MYAPP_CONF(在注释中提到)从一些预定义的目录存储和读取这些文件是很好的原因。

+0

我正在使用tomcat服务器。图像由用户上传 - 不是静态的。 – Yoav 2012-01-04 13:44:20

+0

好,我们通常做的是创建一个指向我们配置目录的环境变量,比如说:MYAPP_CONF =/usr/share/tomcat6/myapp。在开发时,将PC上的MYAPP_CONF指向“D:\”。将picDir放在该目录下。这样你将有相同的开发和生产配置。 请记住确保Tomcat看到该变量。 当你需要从servlet访问一些文件时,使用System.getProperty(“MYAPP_CONF”),瞧。 – 2012-01-04 13:57:32

+0

非常感谢....................... :)但如果我想D/L图像.....我应该从哪个网址获得它。我在你的解释中错过了这部分 – Yoav 2012-01-04 14:03:50