之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下:
1. 需要传入一个可能为中文的文件名;
2. 通过文件名去FTP上寻找该文件;
3. FTP服务器的命名编码为“GBK”;
1.通过GET方法直接将文件名负载URL后面,但需要通过转码;
2.在Java Controller中收到参数后,进行解码,解码为正常数据;
3.用正常数据再转码为GBK,到Service中去调用FTP即可
4.(因公司安全考虑,我们需要在另一个模块中调用FTP)通过rest接口将文件名传出,另一模块获取到文件流转换为byte[]传回,调用response输出即可
Jquery对URL以及参数转码,据我所了解的主要应用encodeURI、encodeURIComponent,例如我需要传入变量名为fileDepence
这样我在后台就可以接收到转码过后的fileDepence这个串,通过验证encodeURIComponent会以“utf-8”进行转码,所以我们使用Java对其解码:
这样得到的viewItem就与我们原本要传入的值一致了,如果传入的为中文文件名,则此时viewItem便是对应的中文文件名了。
之后我又了解一下,通过JS来完成GBK的转码比较麻烦,而采用Unicode的Java则比较方法,则同理,我们使用viewItem在以GBK来转一次码,就可以得到对应的FTP服务器中的文件名了。
建立一个FTP连接的公用类
在另一个模块的Service中建立一个下载的方法,在rest接口访问的Controller中调用该方法。
在本地Service中调用rest接口完成输出response输出即可,同时要注意response的设置