Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 新上传的文件和Tomcat?_Java_Jakarta Ee_Tomcat_Servlets_File Upload - Fatal编程技术网

Java 新上传的文件和Tomcat?

Java 新上传的文件和Tomcat?,java,jakarta-ee,tomcat,servlets,file-upload,Java,Jakarta Ee,Tomcat,Servlets,File Upload,我有一个简单的用于图像上传的servlet,用户选择一个图像,servlet完成其工作,然后将其写入上传目录。我的项目布局: project ├───static │ ├───img │ └───js ├───upload └───WEB-INF └───lib 上载图像后,用户将被重定向到其位置: http://localhost:8080/upload/[image MD5 hash].png 上传代码工作得很好,但是Tom

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

project
    ├───static
    │   ├───img
    │   └───js
    ├───upload
    └───WEB-INF
        └───lib
上载图像后,用户将被重定向到其位置:

http://localhost:8080/upload/[image MD5 hash].png
上传代码工作得很好,但是Tomcat在请求url时返回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 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是否进行某种形式的兑现?)

My web.xml文件:


违约
/静止的/*
/上传/*

有人能告诉我问题出在哪里吗?

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


遗憾的是,在我的英语中,

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


另见:

欢迎来到Stack Overflow&非常感谢!!我终于让它工作了。我刚刚把war文件夹复制到Tomcat的webapps目录中,现在它工作得很好:)。事情不是这样的。如果将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]
> 
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
    <url-pattern>/upload/*</url-pattern>
</servlet-mapping>