【问题标题】:Webservice uploaded image urlWebservice上传的图片url
【发布时间】:2012-02-02 09:15:22
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: java web-services image upload


    【解决方案1】:
    1. 如果目标服务器将运行 Linux/Unix,那么正确的路径应该类似于 /usr/share/myapp。 '~\' 是完全错误的,我猜你的意思是 '~/' 将指向当前用户的主文件夹。应该避免这种情况,因为您可能以具有不同主目录的不同用户身份运行 Web 服务器。通常,在每个环境(开发人员机器、演示、实时服务器)上,您都应该有这样的地方来存储应用程序所需的配置和数据。
    2. 图片的文件系统位置与照片所在的 URL 无关。它取决于将运行您的应用程序和您的应用程序本身的 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 文件的根目录中。

    总结一下:

    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) 时,它将被解包,您将能够在 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 浏览器)不知道底层磁盘结构。浏览器使用请求-响应通信模式,(在上传/下载方面)可以由服务器处理,如下所示:

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

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

    【讨论】:

    • 我正在使用tomcat服务器。图片由用户上传 - 不是静态的。
    • 太好了,我们通常做的是创建指向我们配置目录的环境变量,比如说:MYAPP_CONF=/usr/share/tomcat6/myapp。开发时,将 PC 上的 MYAPP_CONF 指向“D:\”。将 picDir 放在该目录下。这样,您将拥有相同的开发和生产配置。不过,请记住确保 Tomcat 能看到该变量。当您需要从 servlet 访问某些文件时,使用 System.getProperty("MYAPP_CONF"),瞧。
    • 非常感谢.......................:) 但是如果我想 D/L 图像...... . 我应该从哪个 URL 得到它。我在你的解释中错过了这部分
    • 编辑回复。希望对您有所帮助。
    猜你喜欢
    • 2023-03-07
    • 2018-02-22
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2017-07-16
    • 2023-02-08
    相关资源
    最近更新 更多