Webservice上传了图片网址

时间:2012-01-04 13:08:01

标签: java web-services image upload

我正在使用java webservice(在tomcat上)。 我有以下代码处理图像上传:

    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. 网络服务网址:http://192.168.0.11:8080/XWebService/services/XWebService 将更新到域而不是192.168.0.11 什么是获取图像的URL? (例如,如果图片文件夹是:〜\ picDir)

1 个答案:

答案 0 :(得分:2)

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

    1. 选择(并告诉我们)您的应用程序服务器
    2. 对所有环境使用一些配置目录,并将服务器配置为能够看到它
    3. 为所需的域配置服务器
    4. 您应该阅读有关* .war文件的上下文以及文件本身的组织方式的更多信息。

      了解Tomcat示例中的网址和上下文

      假设:

      1. 在您的本地计算机上,所需的servlet位于:http://localhost:8080/myapp/utils/myservlet.html
      2. 您的应用已打包为myapp.war
      3. 远程Tomcat具有IP 2.2.2.2并且正在端口8080上运行
      4. 当您将myapp.war部署到远程Tomcat到webapps目录(/ var / lib / tomcat6 / webapps)时,它将被解压缩,您将能够在http://2.2.2.2:8080/myapp/utils/myservlet.html下看到您的servlet。通过在Tomcat的server.xml中配置应用程序,您可以添加域名并减少不必要的“myapp”部分,称为上下文,有效地将URL保留为http://www.myapp.com/utils/myservlet.html的形式。这就是您在生产环境中所需要的。 Tomcat的文档中解释了这个主题,请参考它。

        从Web应用程序访问文件系统资源 如果您想从服务器保存或获取任何文件,请记住客户端(Web浏览器)不知道底层磁盘结构。浏览器使用请求 - 响应通信模式(在上传/下载方面)可由服务器处理,如下所示:

        • 上传 - 从Request获取一些字节内容并将其保存为服务器文件系统
        • 上的文件
        • 下载 - 从服务器文件系统读取一些字节内容并将其作为响应流式传输

        正如您在两种情况下所看到的,服务器文件系统是服务器本身的内部问题。您可以将其保存在任何地方。您可以从任何位置读取字节。这就是为什么让MYAPP_CONF(在评论中提到)总是从某个预定义的目录中存储和读取这些文件是很好的。