springboot文件流下载文件,springboot读取文件
目录
springboot获取文件流前端获取springboot返回的文件流。我给你提供一个答案和两个解决方案。
00-1010日常开发中,经常会通过获取项目的相对路径来获取项目路径下存储的资源,比如static/ss.txt
在spring项目中,您可以使用request.getRealPath(/)来获取项目路径,并将其拼接在一起以生成流:
//拼接地址string download URL=request . getrealpath(/)/static/ss . txt/;//生成流InputStream is=newfile InputStream(download URL);在springBoot中,request.getRealPath(/)无法获取项目路径。根据数据,resource utils . geturl( class path 3360 )。getpath()可以获取项目路径。在测试中发现resource utils . geturl( class path 3360 )。getpath()获取项目的绝对路径。
Java . io . file not found exception : file :/usr/local/risk _ dubbo/risk-admin/2018 11 05 _ 161334 risk-admin . war!/WEB-INF/classes!/static/ss.txt(没有这样的文件或目录)
无法获取项目中的资源路径。各种数据检查测试表明:
string download URL=/static/ss . txt ;InputStream是=this.getClass()。getResourceAsStream(downLoadUrl);获取输入流。
00-1010我想大家都会通过访问后台来返回文件流,这次就不说了。我主要想说一下给后台传文件路径时的一些小想法!
前提是图片流的访问方式是restful动态路径填充,例如: locahost 33608080/test/img/1 . png。
如果你得到的文件路径只是文件名(就像我上面的例子),那么文件路径可以安全地传输到后台,没有任何问题。
但是假如你现在的文件路径为:shop/goods/title/1.png ,你应该怎么进行传递?
那又怎样?-eg : locahost 33608080/test/img/shop/goods/title/1 . png细心的人会发现这是行不通的,因为浏览器会将后台url匹配到: img/shop/goods/title/,对应的动态参数是1.png这不是我们想要的结果。我们想把shop/goods/title/1.png作为参数传到后台,结果是404!
那么我们应该做些什么呢?聪明的学生会想到replace和replace/用-或者其他运算符。
如果用-替换,应该怎么替换?后台接收时如何恢复原文件路径?
如果你选择前台replaceAll,后台escape back,如果你的文件名上传到服务器,不打算保存,直接存储一串数字应该是没问题的!
现在如果路径参数改为shop/goods/title/2019-04-12 . png,那么在后台恢复文件路径时,就会变成:shop/goods/title/2019/04/12 . png。你可能会感到惊讶。什么?什么情况
00-1010仔细观察windows中的文件命名会发现一些禁止使用的字符/ : *?你会发现/也包含在里面,所以,所以,文件命名不能出现/
00-1010确定当前目录数时,将处理A方案:。你可以写一个while循环。如果有三个当前目录,while(n=3){ path=path . replace first(-,/)},前提是目录没有-
在B方案:,的前端交付过程中,记录路径中每个“/”的位置,然后将该位置拼接到文件名上,再交付给后台,从而完成文件路径的准确恢复。
说到这里,我之前忘了一件事:直接访问thing的时候,为了准确匹配路径,可以在后台路径映射的时候添加这个配置:{file:}
说了这么多,如果你在项目中上传文件的时候不需要保留文件名,文件名都是自定义的,就不会有这么多事情了。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。