java ftp上传时,代码不报错,也上传不过去文件

今天测试上传文件到 ftp 服务器时,上传不过去。其中遇到了假死问题,已经解决了。
解决以后,就发现在这行代码,一直返回 false 。

flag = ftpClient.storeFile(new String(remote.getBytes("UTF-8"),"iso-8859-1"), is);

我查了百度后,各种方法都试过了,都不行,例如:
1.开启这三个
image.png
2.设置

//调用此方法解决假死状态(设置为被动模式:客户端通知服务端开通一个端口用来数据传输)
ftpClient.enterLocalPassiveMode();

3.设置字符集

new String(remote.getBytes("UTF-8"),"iso-8859-1")

4.查看路径权限
image.png

都试过了,都不行!!!!已经无语了,百度了好久都是这几种解决办法。难受,有没有大佬帮忙看看!!!!代码如下:

public class FTPUtil {
    /**
 * 文件上传
 *
 * @param host 服务器IP
 * @param port 服务器端口
 * @param username 服务器用户名
 * @param password 服务器密码
 * @param path /home/ftpuser/test/年/月/日
 * @param fileName 文件名1.jpg
 * @param is 文件流
 * @return
 */
 public static String fileUpload(String host, int port, String username, String password,
 String path, String fileName, InputStream is) {
        // 判断操作是否正确
 boolean flag = false;
 // 返回的文件名
 String remote = null;
 // 创建ftp客户端
 FTPClient ftpClient = new FTPClient();
 try {
            // 设置编码字符集
 ftpClient.setControlEncoding("UTF-8");
 // 连接FTP服务器
 ftpClient.connect(host, port);
 // 登录
 flag = ftpClient.login(username, password);
 //调用此方法解决假死状态(设置为被动模式:客户端通知服务端开通一个端口用来数据传输)
 ftpClient.enterLocalPassiveMode();
 if (!flag) {
                System.out.println("文件服务器用户名或密码错误");
 return null; }
            // 获取登录的状态码
 int reply = ftpClient.getReplyCode();
 if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
 return null; }
            /*****************创建目录 一次只能创建一个目录*****************/
 String basePath = "";
 for (String p : path.split("/")) {
                basePath += (p + "/");
 // 判断目录是否已经存在
 boolean hasPath = ftpClient.changeWorkingDirectory(basePath);
 if (!hasPath) {
                    // 创建目录 一次只能创建一个目录,失败的原因都是权限问题
 //ftpClient.makeDirectory(basePath);
 ftpClient.makeDirectory(new String(basePath.getBytes("UTF-8"),"iso-8859-1"));
 }
            }
            // 重新指定上传的路径
 ftpClient.changeWorkingDirectory(path);
 /*******************************************************/
 // 指定上传方式为二进制方式
 ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
 // 得到文件后缀
 String suffix = fileName.substring(fileName.lastIndexOf("."));
 System.out.println("文件后缀为:" + suffix);
 remote = UUID.randomUUID() + suffix;
 // remote指定上传远程服务器的文件名 local指本地的输入流
 //flag = ftpClient.storeFile(remote, is);
 flag = ftpClient.storeFile(new String(remote.getBytes("UTF-8"),"iso-8859-1"), is);
 System.out.println(flag);
 if (!flag) {
                System.out.println("文件上传失败,可能是权限,防火墙等问题");
 return null; }
        } catch (IOException e) {
            System.out.println("文件上传错误,错误原因:" + e.getMessage());
 } finally {
            try {
                if(is != null)
                    is.close();
 ftpClient.logout();
 if(ftpClient.isConnected())
                    ftpClient.disconnect();
 } catch (IOException e) {
                System.out.println("文件上传错误,错误原因:" + e.getMessage());
 }
        }
        return remote;
 }
    public static void main(String[] args) throws FileNotFoundException {
        FileInputStream is = new FileInputStream(new File("D://123.txt"));
 fileUpload("182.92.xxx.xxx", 21, "ftpuser", "xxx",
 "/home/ftpuser/", "123.txt", is);
 }
}

返回结果

image.png

阅读 3.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题