新上传的文件和Tomcat?

时间:2013-01-16 01:04:54

标签: java java-ee tomcat servlets file-upload

我有一个用于图像上传的简单servlet,用户选择一个图像,servlet完成其工作,然后将其写入 upload 目录。我的项目布局:

project
    ├───static
    │   ├───img
    │   └───js
    ├───upload
    └───WEB-INF
        └───lib

上传图片后,用户将被重定向到其位置:

http://localhost:8080/upload/[image MD5 hash].png

上传代码运行良好,但即使图像在那里,Tomcat在请求网址时也会返回404错误:

> wget http://localhost:8080/upload/f5d1da2cadf3bd1c1b9196ec522a5d73.png
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\GnuWin32/etc/wgetrc
--2013-01-16 03:45:33--  http://localhost:8080/upload/f5d1da2cadf3bd1c1b9196ec522a5d73.png
Resolving localhost... 127.0.0.1, ::1
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-01-16 03:45:33 ERROR 404: Not Found.
> 

点击我的IDE中的update classes and resources,Intellij后,它可以运行:

> wget http://localhost:8080/upload/f5d1da2cadf3bd1c1b9196ec522a5d73.png
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\GnuWin32/etc/wgetrc
--2013-01-16 03:48:11--  http://localhost:8080/upload/f5d1da2cadf3bd1c1b9196ec522a5d73.png
Resolving localhost... 127.0.0.1, ::1
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11666 (11K) [image/png]
Saving to: `f5d1da2cadf3bd1c1b9196ec522a5d73.png'

100%[==========================================================>] 11,666      --.-K/s   in 0s

2013-01-16 03:48:11 (72.9 MB/s) - `f5d1da2cadf3bd1c1b9196ec522a5d73.png' saved [11666/11666]
>

第二件事是,当我手动删除这个图像时,我仍然可以下载它(Tomcat会做某种兑现吗?):

> del f5d1da2cadf3bd1c1b9196ec522a5d73.png
> wget http://localhost:8080/upload/f5d1da2cadf3bd1c1b9196ec522a5d73.png
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\GnuWin32/etc/wgetrc
--2013-01-16 04:12:25--  http://localhost:8080/upload/f5d1da2cadf3bd1c1b9196ec522a5d73.png
Resolving localhost... 127.0.0.1, ::1
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11666 (11K) [image/png]
Saving to: `f5d1da2cadf3bd1c1b9196ec522a5d73.png'

100%[==========================================================>] 11,666      --.-K/s   in 0s

2013-01-16 04:12:25 (93.2 MB/s) - `f5d1da2cadf3bd1c1b9196ec522a5d73.png' saved [11666/11666]
> 

我的 web.xml 文件:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
    <url-pattern>/upload/*</url-pattern>
</servlet-mapping>

有人可以告诉我问题在哪里吗?

2 个答案:

答案 0 :(得分:3)

这不是处理文件上传的正确方法。您不应将上载的文件存储在deploy文件夹中。您当然也不应该在webapp自己的web.xml中映射特定于容器的默认servlet。您应该将上载的文件存储在本地磁盘文件系统上其他位置的固定的非部署相关文件夹中,然后通过Tomcat中的新<Context>发布它。 E.g。

<Context docBase="/var/webapp/upload" path="/upload" />

另见:

答案 1 :(得分:0)

在开发中部署时,您的资源将部署在开发资源而非工作区中,当您在工作区中删除时,必须重新部署以进行开发资源的更改

我的英文中的sory,