但是有人上传了一张中文名称图片:经过controller我打印文件名正常显示,写入数据库后也正常
48 other pic userPic/爱的棉花糖.jpg 0
49 other pic userPic/win7.jpg 0
在controller中的showPic方法从数据库获取的list中也没乱码:
/static/userPic/win7.png,
/static/userPic/爱的棉花糖win7.jpg
然后我用jstl将其循环写入页面英文名开头的照片统统正常显示,中文的找不到路径,
<c:forEach items="${picmap.value}" var="picPath">
<li><img src='<c:url value="${picPath}"></c:url>'
class="thumbnail"></li>
</c:forEach>
项目并没有报错,也没有不正常,就是中文资源获取不到,英文名的照片能够正常获取到。怎么破?
补充:我的/static/userPic/是上传图片文件夹,上传的文件无论中英文均正常命名,文件也没有损坏,我做了一些尝试,我的/static/userPic/中上传了两张图片:win7.png和惠普.png,均没有损坏我的静态资源访问控制也正常:
直接访问http://localhost:8080/yuntu/static/userPic/win7.png可以显示图片
直接访问http://localhost:8080/yuntu/static/userPic/惠普.png找不到资源
这种怎么破,或者大神给我提供思路可好
14 个解决方案
#1
别沉啊,大婶求破
#2
http协议不允许中文连接的。都会转码的。无解,正常的办法都是采用英文的。
#3
可是很多人都会上传中文名称图片,给个解决思路呗
#4
求不沉,大神求解,给个折中方案就好
#5
他们那是给了中文名称字段,在下载的时候再取中文名称下载,存下来的文件还是英文的
#6
我也遇到了同样的问题. 目前所有带中文的资源全都访问不到,包括自己上传的文件,下载也不行. 我做过encodeuri的转码试验也是不能下载.这应该是spring mvc的一个bug吧.
#7
配置Tomcat下conf/Server.xml,在里面Http的Connector中加上URIEncoding=”UTF-8“。
如下面所示:
如下面所示:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
#8
还是用代码转码吧。这跟浏览器发送的请求有关,所以必须转。中文很危险的。如果有可能还是把上传的文件名转成英文比较好
#9
文件名弄两部分,一部分是给人看的用中文,一部分是程序用的不用中文!
#10
你图片文件上传是怎么搞的,ajax还是普通form
#11
相当于get请求请求服务器资源了,之所以请请求不到是因为,页面将中文base64后,服务器解码时所用编码不一致。
需要在tomcat中设置Connector URIEncoding为utf-8 注:这个utf-8编码不一定是你项目的编码,主要看当前浏览器对于页面的编码,一般与页面的meta 中的charset 一致。 如果不写meta,默认chrome为utf-8 ,IE为gbk。
需要在tomcat中设置Connector URIEncoding为utf-8 注:这个utf-8编码不一定是你项目的编码,主要看当前浏览器对于页面的编码,一般与页面的meta 中的charset 一致。 如果不写meta,默认chrome为utf-8 ,IE为gbk。
#12
httpHeaders.add("Content-Disposition", "attachment;filename=" + new String(file.getBytes("utf-8"),"iso-8859-1"));
#13
pinyin4j转换成拼音呗
#14
正解,下载的时候需要iso-8859-1就会显示中文文件名了
#1
别沉啊,大婶求破
#2
http协议不允许中文连接的。都会转码的。无解,正常的办法都是采用英文的。
#3
可是很多人都会上传中文名称图片,给个解决思路呗
#4
求不沉,大神求解,给个折中方案就好
#5
他们那是给了中文名称字段,在下载的时候再取中文名称下载,存下来的文件还是英文的
#6
我也遇到了同样的问题. 目前所有带中文的资源全都访问不到,包括自己上传的文件,下载也不行. 我做过encodeuri的转码试验也是不能下载.这应该是spring mvc的一个bug吧.
#7
配置Tomcat下conf/Server.xml,在里面Http的Connector中加上URIEncoding=”UTF-8“。
如下面所示:
如下面所示:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
#8
还是用代码转码吧。这跟浏览器发送的请求有关,所以必须转。中文很危险的。如果有可能还是把上传的文件名转成英文比较好
#9
文件名弄两部分,一部分是给人看的用中文,一部分是程序用的不用中文!
#10
你图片文件上传是怎么搞的,ajax还是普通form
#11
相当于get请求请求服务器资源了,之所以请请求不到是因为,页面将中文base64后,服务器解码时所用编码不一致。
需要在tomcat中设置Connector URIEncoding为utf-8 注:这个utf-8编码不一定是你项目的编码,主要看当前浏览器对于页面的编码,一般与页面的meta 中的charset 一致。 如果不写meta,默认chrome为utf-8 ,IE为gbk。
需要在tomcat中设置Connector URIEncoding为utf-8 注:这个utf-8编码不一定是你项目的编码,主要看当前浏览器对于页面的编码,一般与页面的meta 中的charset 一致。 如果不写meta,默认chrome为utf-8 ,IE为gbk。
#12
httpHeaders.add("Content-Disposition", "attachment;filename=" + new String(file.getBytes("utf-8"),"iso-8859-1"));
#13
pinyin4j转换成拼音呗
#14
正解,下载的时候需要iso-8859-1就会显示中文文件名了