【问题标题】:Can't get path to upload on host. Jsp无法获取在主机上上传的路径。 jsp
【发布时间】:2015-04-03 17:15:32
【问题描述】:

请帮助我,我整整一周都试图在谷歌上找到答案,但我没有运气。对我一点用都没有,这是我的问题,我真的很感谢你的帮助。

我想在我的主机上上传一张图片,我使用了这样的代码,它在 localhost 上运行良好,但在我的真实主机上却不行。这是我的代码:

 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
        }
        else {  
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = null;

            try {
                items = upload.parseRequest(request);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            Iterator iter = items.iterator();



            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (item.isFormField()) {
                    params.put(item.getFieldName(), item.getString());
                } else {
                    try {
                        String itemName = item.getName();
                        filename = rdhash.randomHash() + itemName.substring(
                                itemName.lastIndexOf("\\") + 1);
                        String realPath = getServletContext().getRealPath("/")
                                + "banner\\" + filename;

                        out.println(realPath);
                        File savedFile = new File(realPath);
                        item.write(savedFile);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

正如我所说,它不能在我的真实主机上运行。我试图找出为什么它不起作用,我发现它无法获取上传路径,它可能无法获取上传路径,因为 out.println() 代码向我显示如下:

null\banner\[my file name].jpg

但是当我在本地主机上尝试时,它会显示我的项目的整个路径,例如:

C:\[myproject folder]\banner\[my file name].jpg

我不知道为什么它无法在我的主机上获取真实路径。请帮帮我,我现在脑子里一片空白。我的托管服务器是 Tomcat 7 bros。

--------------更新------ --- 这是我 server.xml 内容的一部分。

 <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access" suffix=".log" rotatable="false"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>
   <Host name="[myhost].com" appBase="/Homedata/[hostname]/public_html" unpackWARs="true" deployXML="false">
      <Alias>www.[hostname].com</Alias> 
      <Context path="" reloadable="true" docBase="/Homedata/[hostname]/public_html" debug="1"/>
      <Context path="/manager" debug="0" privileged="true"
          docBase="/usr/local/easy/share/easy-tomcat7/webapps/manager">
      </Context>
   </Host>

【问题讨论】:

  • 你主机上的war文件解压了吗?
  • @Stefan no stev,我尝试将它部署在 tomcat 管理器上,它很好,tomcat 显示 OK 状态但是当我查看我的主机时,它只是主机上的一个战争文件,仅此而已。它没有解包,我也不知道如何解包,至少 tomcat manager 已将其上传到我的主机上但没有解包:(

标签: java jsp tomcat web hosting


【解决方案1】:

将“unpackWARs”属性添加到Tomcats“server.xml”中的主机配置并将其设置为true。可能看起来像这样:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

更好:不要将上传的文件放入您的应用程序目录。重新部署应用程序后,内容将丢失。在服务器的任意位置创建一个外部目录,并将完整路径添加到您的应用配置中。

【讨论】:

  • 所以我需要让主机提供商在 server.xml 中添加“unpackWARs”属性,之后,只需要从我的计算机重新部署 war 文件对吗?我会尝试并报告给你,谢谢@Stefan
  • Stefan:我试着像你说的那样设置属性,现在我的主机不再工作了:(。我不知道为什么,但我在 server.xml 中看到有两个 标签,一个名称为 localhost,另一个名称为 [mysitename]。:(,接下来我必须做什么 :(
  • 我不知道您如何托管您的应用程序。如果您的提供程序不支持解压缩战争文件(不这么认为),您可以尝试我的第二个建议。请使用您当前的 server.xml 更新您的问题。
  • 你在哪里@Stefan
  • 你能添加 autoDeploy="true" 并从宿主元素中移除 deployXML="false" 吗?
猜你喜欢
  • 1970-01-01
  • 2013-11-24
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多