![](/img/trans.png)
[英]How to get uploaded file to local folder in spring surf java webscript?
[英]How to store uploaded file in project folder in Java
我是Java Web的新手,目前正在尝试将上传的文件(带有servlet)存储在项目中的文件夹中。 在web.xml中,我可以分隔完整路径,但是完整路径在其他人的计算机中会有所不同,并且无法正常工作,因此如何将上传的文件存储在我正在使用的项目中的文件夹中。 我的web.xml看起来像这样:
<web-app>
...
<context-param>
<description>Location to store uploaded file</description>
<param-name>file-upload</param-name>
<param-value>
C:\Users\George\Desktop\dataFolder\
</param-value>
</context-param>
...
</web-app>
但我想使路径看起来像这样:thisProject \\ dataFolder
有几种方法可以这样做,但是要点是:
您使用绝对路径并使其依赖于部署。
Web应用程序非常特殊,您并不真正知道它们将被部署在哪里,您不能对工作目录承担太多责任,一旦部署,将不会有像项目文件夹这样的东西。
因此,如果您需要一个文件夹来放置上载的文件,则只需假设您将拥有一个文件夹并使用参数来找到它。
如果将这样的参数放在web.xml中,则可以使用服务器设置覆盖它,如何使用它取决于所使用的应用程序服务器。
设置部署特定设置的另一种方法是使用环境变量。 因此,您可以定义一个环境变量,例如MYAPP_FILESTORAGE,并在此变量中设置文件上传的实际路径。
在eclipse中(我认为其他IDE也具有类似的机制),您可以为应用程序RUN / DEBUG设置环境变量。
如果无法在自己的IDE中进行设置,则仍可以在OS中将其设置为用户变量或系统变量。
因此,在您的项目中,不会有对路径的硬编码引用,而是由环境变量解析的逻辑引用。
你们每个人和您的朋友只需要设置一次。
您也可以将此类信息存储在DB上或使用特定于容器的机制。
我自己做这个确切的项目时遇到了同样的问题。我所做的是我仅在我的projectApp中创建了存储目录。这是myProject / WEB-INF / saveFiles 。 因此,我的下载不限于任何机器。我可以在我的ubuntu / windows / mac中使用它而没有任何问题。 既然您已经知道了为什么不应该使用绝对路径,那么就进入解决方案。在您的servlet代码中。假设用于存储的目录是FileStorage ,并且您的应用程序结构是
myProject-> WEB-INF-> FileStorage
/* Get the directory location.myContextPath is the path of your
application. It will return "somepath/myProject/". */
File storageDirectory=new File(request.myContextPath()+"/WEB-INF/FileStorage");
//Now check if the directory is already created or not.If its not created,then it means your application is being run for the 1st time on this machine.
if(!storageDirectory.exists())
storageDirectory.mkdir();
现在您已经有了一个独立于平台的存储目录,现在就可以继续保存文件了。 注意:可以说为什么我选择FileStorage位置作为myProject / WEB-INF / FileStorage而不是myProject / FileStorage 。之所以这样做是因为用户可以直接访问WEB-INF之外的任何内容。只有WEB-无法直接访问INF,将重要内容保存在其中会更安全。
当您在servlet中获取文件的字节时,只需在Java中使用fileoutputstream写入即可
例如
部分p = request.getpart(“ file”);
Inputstream是= p.getinputstram();
byte [] b = IOutils.getbytes(is);
FileOutputStream fos = null;
尝试{//创建新文件输出流
fos = new FileOutputStream(“ C://test.txt”);
//将字节写入输出流
fos.write(b)中;
//将内容刷新到基础流
fos.flush();
catch(Exception ex){//如果发生错误
ex.printStackTrace();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.