我的编程空间,编程开发者的网络收藏夹
学习永远不晚

完全解决FTP上传文件名称中文乱码问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

完全解决FTP上传文件名称中文乱码问题

完全解决FTP上传文件名称中文乱码问题

说明

今天项目上加了个定时扫描本地文件路径下所有文件实现自动上传至ftp文件服务器的功能,经测试发现一旦上传中文名称的文件就会乱码或者文件上传不了。初步排查就是FTP服务器字符编码的问题。在网上查了很多资料都没有效果。在这里讲一下我踩过的坑,以及分享我能上传成功的样例。

无效踩坑经历

public static String encodingUTF8(String path) throws UnsupportedEncodingException {        return new String(path.getBytes("UTF-8"), "ISO-8859-1");    }    public static String encodingGBK(String path) throws UnsupportedEncodingException {        return new String(path.getBytes("GBK"), "ISO-8859-1");    }    

请添加图片描述

有效解决方法

思路:设置ftp支持UTF-8, ftpClient.sendCommand(“OPTS UTF8”, “ON”),核心代码如下

//链接至ftp服务器,设置编码格式 Ftp ftp = new Ftp(url, 21, username, password);//开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就用本地编码(ISO-8859-1)if (FTPReply.isPositiveCompletion(ftp.getClient().sendCommand("OPTS UTF8", "ON"))) {    ftp.getClient().setControlEncoding("UTF-8");} else {   //FTP协议里面,规定文件名编码为iso-8859-1    ftp.getClient().setControlEncoding("ISO-8859-1");}

定时上传文件至ftp样例

引用工具组件:hutool

package cn.dexter.filesync;import cn.dexter.filesync.metadata.sync.util.PropertiesUtils;import cn.hutool.core.io.FileUtil;import cn.hutool.core.io.IORuntimeException;import cn.hutool.core.util.StrUtil;import cn.hutool.extra.ftp.Ftp;import org.apache.commons.net.ftp.FTPReply;import java.io.File;import java.time.Duration;import java.time.LocalDateTime;import java.util.List;public class FtpUploadThread extends Thread {    String url = PropertiesUtils.getString("ftp.url");    String username = PropertiesUtils.getString("ftp.username");    String password = PropertiesUtils.getString("ftp.password");        String messageLocalPath = PropertiesUtils.getString("file.localPath");        String svrTopic = PropertiesUtils.getString("svrTopic");    @Override    public void run() {        try {            List fileList = FileUtil.loopFiles(messageLocalPath);            if (fileList.size() > 0) {                LocalDateTime starttime = LocalDateTime.now();                Ftp ftp = new Ftp(url, 21, username, password);                //开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就用本地编码(ISO-8859-1)                if (FTPReply.isPositiveCompletion(ftp.getClient().sendCommand("OPTS UTF8", "ON"))) {                    ftp.getClient().setControlEncoding("UTF-8");                } else {                   //FTP协议里面,规定文件名编码为iso-8859-1                    ftp.getClient().setControlEncoding("ISO-8859-1");                }                //设置被动模式                ftp.getClient().enterLocalActiveMode();                for (File file : fileList) {                    if (file.isFile()) {                        //每次上传后切换操作路径为根路径                        ftp.cd("/");                        //读取文件绝对路径                        String absolutePath = file.getAbsolutePath().replace("\\", "/");                        String fileName = file.getName();                        //替换ftp服务器远程根路径                        String remotePath = absolutePath.replace(messageLocalPath, "").replace(fileName, "");                        if (StrUtil.isNotBlank(svrTopic)) {//添加服务器主题remotePath = svrTopic + "/" + remotePath;                        }                        try {if (ftp.upload(remotePath, fileName, file)) {    //文件上传成功后,删除本地数据。    FileUtil.del(file);}                        } catch (IORuntimeException e) {System.out.println(String.format("上传文件[%s]失败!", absolutePath));                        }                    }                }                ftp.close();                LocalDateTime endttime = LocalDateTime.now();                Duration duration = Duration.between(starttime, endttime);                System.out.println(String.format(" 本次文件同步耗时:%s分钟 %s秒", duration.toMinutes(), duration.toMillis() / 1000));            }        } catch (Exception e) {            System.out.println(String.format("上传文件至ftp服务器异常:%s", e.getMessage()));        }    }}

来源地址:https://blog.csdn.net/qq_37959253/article/details/129463230

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

完全解决FTP上传文件名称中文乱码问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

完全解决FTP上传文件名称中文乱码问题

完全解决FTP上传文件名称中文乱码问题 说明无效踩坑经历 有效解决方法定时上传文件至ftp样例 说明 今天项目上加了个定时扫描本地文件路径下所有文件实现自动上传至ftp文件服务器的功能,经测试发现一旦上传中文名称的文件
2023-08-21

drupal6上传中文文件名附件乱码问题解决方法

本文实例讲述了drupal6上传中文文件名附件乱码问题解决方法。分享给大家供大家参考。具体方法如下: drupal6的upload模块只能上传英文名字的文件,我经过一段时间的测试,完美解决了drupal下中文文档上传的问题。 其实文档上传,
2022-06-12

文件上传到服务器文件名中文乱码问题

上传文件时文件名中文乱码的解决方法:原因:编码不一致URL编码错误文件系统限制服务器配置问题解决方案:客户端和服务器使用一致的编码(如UTF-8)正确URL编码中文汉字(如%XX)选择支持中文的文件系统(如NTFS、EXT4)配置服务器(Apache、Nginx、数据库)支持中文文件名具体步骤:客户端:使用Unicode编码(如UTF-8)和正确URL编码服务器:设置字符编码(如AddDefaultCharsetUTF-8)、使用支持Unicode的文件系统其他:使用支持中文的文件类型,避免特殊字符,考虑
文件上传到服务器文件名中文乱码问题
2024-04-02

完美解决Python2操作中文名文件乱码的问题

Python2默认是不支持中文的,一般我们在程序的开头加上#-*-coding:utf-8-*-来解决这个问题,但是在我用open()方法打开文件时,中文名字却显示成了乱码。 我先给大家说说Python中的编码问题,Python中的字符串的
2022-06-04

Zuul上传文件时中文文件名乱码怎么解决

本篇内容介绍了“Zuul上传文件时中文文件名乱码怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题描述在项目中又一个上传文件的oss
2023-06-19

如何解决php文件中文名乱码问题

php文件中文名乱码的解决办法:1、在php文件的头部加入charset代码:2、设置“iconv('utf-8','gb2312',"upload/".$file["name"]);”即可。
2019-04-10

怎么解决php文件中文名乱码问题

这篇文章主要介绍了怎么解决php文件中文名乱码问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php文件中文名乱码的解决办法:1、在php文件的头部加入charset代码:
2023-06-22

PHP文件名乱码问题解决方案

PHP文件名乱码问题解决方案及代码示例在日常的Web开发中,经常会遇到文件名乱码的问题,特别是在处理中文文件名时更容易出现这种情况。本文将为大家介绍如何解决PHP文件名乱码问题,并提供具体的代码示例。问题分析PHP默认使用UTF-8编
PHP文件名乱码问题解决方案
2024-02-27

Java读写.properties文件解决中文乱码问题

一般使用到properties配置文件,一般都是在spring项目里面,直接由框架帮你读,当然,你也得考虑到编码的问题。但是现在要是要求使用Java直接读写properties文件,就发现很多的问题,比如,我的properties文件的编码
2023-05-30

php怎么解决url中文传参乱码问题

php解决url中文传参乱码问题的方法:1、使用urlencode和urldecode函数进行转码;2、通过“iconv("gb2312","UTF-8",$gonghui);”方式转码。
2018-12-07

php如何解决url中文传参乱码问题

本篇内容主要讲解“php如何解决url中文传参乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何解决url中文传参乱码问题”吧!php解决url中文传参乱码问题的方法:1、使用ur
2023-06-22

Python基础教程:Flask上传文件(包含中文)保存后乱码问题解决

Flask是支持文件上传的, 近来做了一个上传SQL文件的功能, SQL中会使用到中文, 泰文, 马来西亚文等多种语言, 我们通过Flask接收到文件, 先把文件保存在后端, 保存后却发现是乱码.from flask import req
2023-06-02

编程热搜

目录