java中ftp文件上传和中文乱码解决

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

前几天 有个需求就是上传文件的时候,本地存一份,其他服务器也保存一份,于是就研究了一下,功能只实现了上传文件不能上传文件夹,

这里主要用到了 ftp服务器软件 网上有很多我用的是 serv-u,操作比较简单很容易像我这样的小菜使用

服务器下载地址

点击打开链接           绝对安全无病毒

实现类代码

[java] view plain copy
  1. <pre code_snippet_id="244843" snippet_file_name="blog_20140319_4_6086968" name="code" class="java">package com.core.haction;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.io.PrintWriter;  
  7. import org.apache.commons.net.ftp.FTPClient;  
  8. import org.apache.commons.net.ftp.FTPReply;  
  9. import com.core.action.BaseAction;  
  10.   
  11. public class ShangChuanFtp extends BaseAction<Model> {  
  12.   
  13.     public ShangChuanFtp() {  
  14.         super(Model.class);  
  15.         // TODO Auto-generated constructor stub  
  16.     }  
  17.   
  18.     /** 
  19.      *  
  20.      */  
  21.     private static final long serialVersionUID = 1L;  
  22.     private FTPClient ftp;  
  23.   
  24.     /** 
  25.      *  
  26.      * @param path 
  27.      *            上传到ftp服务器哪个路径下 
  28.      * @param addr 
  29.      *            地址 
  30.      * @param port 
  31.      *            端口号 
  32.      * @param username 
  33.      *            用户名 
  34.      * @param password 
  35.      *            密码 
  36.      * @return 
  37.      * @throws Exception 
  38.      */  
  39.     private boolean connect(String path, String addr, int port,  
  40.             String username, String password) throws Exception {  
  41.         boolean result = false;  
  42.         ftp = new FTPClient();  
  43.         int reply;  
  44.         ftp.connect(addr, port);//连接ftp服务器  
  45.         ftp.login(username, password);//登录ftp  
  46.         ftp.setFileType(FTPClient.BINARY_FILE_TYPE);  
  47.         reply = ftp.getReplyCode();  
  48.         if (!FTPReply.isPositiveCompletion(reply)) {  
  49.             ftp.disconnect();  
  50.             return result;  
  51.         }  
  52.         ftp.changeWorkingDirectory(path);  
  53.         result = true;  
  54.         return result;  
  55.     }  
  56.   
  57.     /** 
  58.      *  
  59.      * @param file 
  60.      *            上传的文件或文件夹 
  61.      *             
  62.      *            代码我是从网上找的,在使用过程中出现了,中文文件名称不能上传,后来自己改变了一下编码 
  63.      * @throws Exception 
  64.      */  
  65.     private void upload(File file) throws Exception {  
  66.         if (file.isDirectory()) {  
  67.             // System.out.println(file.isDirectory()+"\n"+file.getName());  
  68.             ftp.makeDirectory(new String(file.getName().getBytes("utf-8"),"8859_1"));//给文件名转换编码  
  69.             //System.out.println(file.getName());  
  70.             ftp.changeWorkingDirectory(new String(file.getName().getBytes("utf-8"),"8859_1"));  
  71.             String[] files = file.list();  
  72.             for (int i = 0; i < files.length; i++) {  
  73.                 File file1 = new File(file.getPath() + "\\" + files[i]);  
  74.                 if (file1.isDirectory()) {  
  75.                     upload(file1);  
  76.                     ftp.changeToParentDirectory();  
  77.                 } else {  
  78.                     File file2 = new File(file.getPath() + "\\" + files[i]);  
  79.                     FileInputStream input = new FileInputStream(file2);  
  80.                     ftp.storeFile(new String(file2.getName().getBytes("utf-8"),"8859_1"), input);  
  81.                     input.close();  
  82.                 }  
  83.             }  
  84.         } else {  
  85.             File file2 = new File(file.getPath());  
  86.             System.out.println(file2.getName());  
  87.             FileInputStream input = new FileInputStream(file2);  
  88.             ftp.storeFile(new String(file2.getName().getBytes("utf-8"),"8859_1"), input);  
  89.             input.close();  
  90.         }  
  91.     }  
  92.   
  93.     // public static void main(String[] args) throws Exception{//本地测试方法  
  94.     // ShangChuanFtp t = new ShangChuanFtp();  
  95.     // t.connect("", "远程服务器的Ip地址", 21, "ftp的登录名", "ftp的登录密码");  
  96.     // File file = new File("d:\\webapps");//要上传的文件地址  
  97.     // t.upload(file);  
  98.     // System.out.println("上传完成");  
  99.     // }  
  100.     /** 
  101.      *  
  102.      * @param file 
  103.      *          以下代码,住web页面用的,strut2的语法大家应该都会知道   
  104.      * @throws IOException 
  105.      */  
  106.     private File pphoto;  
  107.     private String pphotoFileName;  
  108.     private String pphotoFileContentType;  
  109.     private static final String filePath = "/while/photo";//上传文件到本地服务器的路径  
  110.     private String textfield;  
  111.   
  112.     public String scftp() throws IOException {  
  113.         PrintWriter out = getResponse().getWriter();  
  114.           
  115.         try {  
  116.               
  117.             String fileUrl = null;  
  118.             if (pphoto != null) {  
  119.                 //自己封装的上传本地服务器的方法fileUrl是方法的返回值我这里是返回的文件名称  
  120.                 fileUrl = this.saveFile(pphoto, pphotoFileName, filePath,false);  
  121.                 System.out.println("3:" + this.getSession().getAttribute("dir"));  
  122.                 //t.connect("", "远程服务器的Ip地址", 21, "ftp的登录名", "ftp的登录密码");21是端口号  
  123.                 connect("""000.000.000.000"21"""");  
  124.                 //this.getSession().getAttribute("dir")这个是获取的上传到本地服务器的路径,用了个懒办法,在上传方法我存到session里面,这边获取的  
  125.                 //fileUrl是你上传的那个文件名  
  126.                 File file = new File(this.getSession().getAttribute("dir")+"/"+fileUrl);  
  127.                 upload(file);  
  128.             } else {  
  129.                 out.print("0");  
  130.             }  
  131.               
  132.   
  133.         } catch (Exception e) {  
  134.             // TODO Auto-generated catch block${ctx }/json/scftp.action  
  135.             System.out.println(e.getMessage());  
  136.         }  
  137.   
  138.         out.print("1");  
  139.         return null;  
  140.     }  
  141.   
  142.     public String getTextfield() {  
  143.         return textfield;  
  144.     }  
  145.   
  146.     public void setTextfield(String textfield) {  
  147.         this.textfield = textfield;  
  148.     }  
  149.   
  150.     public File getPphoto() {  
  151.         return pphoto;  
  152.     }  
  153.   
  154.     public void setPphoto(File pphoto) {  
  155.         this.pphoto = pphoto;  
  156.     }  
  157.   
  158.     public String getPphotoFileName() {  
  159.         return pphotoFileName;  
  160.     }  
  161.   
  162.     public void setPphotoFileName(String pphotoFileName) {  
  163.         this.pphotoFileName = pphotoFileName;  
  164.     }  
  165.   
  166.     public String getPphotoFileContentType() {  
  167.         return pphotoFileContentType;  
  168.     }  
  169.   
  170.     public void setPphotoFileContentType(String pphotoFileContentType) {  
  171.         this.pphotoFileContentType = pphotoFileContentType;  
  172.     }  
  173.   
  174. }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线段与多边形的关系

转自周见智 介绍 最近项目中要用到有关几何&#xff08;Geometry&#xff09;方面的知识&#xff0c;程序需要判断给定的一条线段&#xff08;Segment&#xff09;与指定多边形&#xff08;Polygon&#xff09;的位置关系。这种关系分为三种&#xff1a;多边形包含线段、多边形…

shell的交互式和非交互式登录

工作中经常碰见环境变量加载问题&#xff0c;归根结底就是配置文件的加载问题。 一般会有四种模式&#xff1a;交互式登陆、非交互式登陆、交互式非登陆、非交互非登陆。 交互式和非交互式对环境变量的加载: -------------------------------------------------- | …

运营商取消话费余额有效期后改收闲置费

摘要&#xff1a;截至昨天&#xff0c;北京的CDMA预付费手机用户均收到了中国电信北京公司的短信通知。5月初&#xff0c;中国联通正式取消有月租或有月最低消费的预付费产品的话费有效期。而邱宝昌认为&#xff0c;防止倒号和号码资源浪费本应是运营商的责任&#xff0c;现在运…

内存栅栏的影响

当我们在使用jvm锁的时候&#xff0c;一方面是为了减少线程的竞争&#xff0c;另外还有一方面就是保证共享数据的及时可见性。为了保证线程共享变量的可见性&#xff0c;会使用到内存栅栏&#xff0c;jvm设置内存栅栏&#xff0c;并将共享数据及时刷新到主存中保证其他线程可以…

hibernate连接数据库配置

hibernate连接数据库配置 1.连接mySql&#xff0c;文件配置如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://…

解决,文件上传到 ftp 服务器,中文出现乱码问题

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 上传到 ftp 服务器&#xff0c;中文出现乱码解决&#xff0c;之前文件名 “ 网关信息 ” 始终不能正确显示&#xff0c;尝试了多种编码…

常用负载均衡策略分析

背景 一般生产环境单机所能承受的QPS压力为2w左右&#xff0c;过大的压力会导致服务器爆炸。即便是单机能够撑住2w QPS&#xff0c;一般也不会这么做&#xff0c;生产环境一般会预留50%的冗余能力&#xff0c;防止QPS因为某个热门的活动而爆炸。当QPS超过单机所能承受的压力时&…

cpu id 系列号代码

1。先看看是那家公司的cpu,有intel的&#xff0c;还有amd的和 cyrix的。全世界只有三家&#xff0c;实际就是两家。 先让EAX0&#xff0c;再调用CPUID Inel的CPU将返回: EBX:756E6547H Genu EDX:49656E69H ineI ECX:6C65746EH ntel EBX,EDX,E…

解决- SecureCRT上运行 linux vim 命令中文出现乱码

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 乱码如图&#xff1a; 这个问题是CRT的编码设置造成的&#xff0c;改一下设置就可以了&#xff1a; 1. 在当前连接上右键选择最后一个 2…

开发一个自己的 CSS 框架(五)

这一期我们继续完成我们的网格布局 容器类 通过一个 # 占位符&#xff0c;来减少代码输出量。 #containerpadding-right: 15pxpadding-left: 15pxmargin-right: automargin-left: auto.containerwidth: 100%extend #containermedia screen and (min-width: $media-size-1)max-w…

mysql event 简单demo

功能&#xff1a;每3秒删除b表数据&#xff0c;查询a表中的5条数据并插入b表。 /* 查看mysql事件状态 */ show variables like %event_scheduler%;/* 开启mysql事件 */ SET GLOBAL event_scheduler ON;/* 测试a表*/ CREATE TABLE test_a (id int(11) NOT NULL AUTO_INCREMENT…

linux中操作数据库的使用命令记录

1&#xff0c;mysql 查看数据库表编码格式&#xff1a; show create table widget; 修改数据库表编码格式&#xff1a; alter table widget default character set utf8; 修改数据库表中某字段的编码格式&#xff1a; alter table widget change widget_name widget_name varc…

ICC Scenario Definition

现代先进工艺下的后端设计都是在 MCMM 情况下设计的&#xff0c;所谓 MCMM 就是 muti-corner muti-mode&#xff0c;用于芯片的不同工作模式和工作条件。 后端设计过程中&#xff0c;需要保证芯片在所有工作模式和工作条件下都能正常工作&#xff0c;工作模式一般只有几种&…

别瞎忙活:创业公司的6条时间管理策略

导读&#xff1a;无数创业者为自己的公司努力拼搏&#xff0c;把一切时间投入到公司建设中。这种724小时的热情对于创业者本人是必须的&#xff0c;然而对于创业中的团队来说&#xff0c;更重要的是学会管理时间。倦怠是错误时间管理带来的显著危害&#xff0c;但最大的危险是因…

JDK8下载|JDK1.8下载可选择window版和linux版

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 摘要&#xff1a;Oracle甲骨文公司Oracle公司如期发布了Java 8正式版!现在你就可以下载Java 8正式版了&#xff0c;同期发布的还有JDK 8。…

持续集成与持续部署宝典Part 2:创建持续集成流水线

2019独角兽企业重金招聘Python工程师标准>>> 在本系列文章中&#xff0c;我们将探讨在容器时代如何在基于Docker的环境中创建连贯的工作流程和流水线来简化大规模项目的部署。另外&#xff0c;我们还将详细介绍如何利用Docker和Rancher自动化处理这些工作流。 在上文…

64 装饰器函数: 母版 csrf防御机制 cookie

主要内容: 1: 装饰器函数 a: 原理: 在不改变原函数的代码和调用方式的情况下, 给函数动态的添加功能 b: 实例: 装饰器的原理: def yue(tools):print(使用%s约一约 % tools) def wrapper(fn):def inner(*args, **kwargs):print(先准备好钱)fn(*args, **kwargs)return inner yue …

Facebook与Google的互联网霸主争夺战

摘要&#xff1a;谷歌的两位创始人对搜索情有独钟&#xff0c;而没有看到互联网发展的大势。虽然目前Facebook的估值最高为1000亿美元&#xff0c;与谷歌近2000亿美元的市值还相去甚远&#xff0c;但是未来很有可能超越谷歌&#xff0c;成为互联网新一代霸主。谷歌的两位创始人…

Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方案一&#xff1a;用Eclipse自带的Export功能 步骤1&#xff1a;准备主清单文件 “MANIFEST.MF”&#xff0c; 由于是打包引用了第三…

Linux-MySQL基本命令-SQL语句

服务端命令SQL 在数据库系统中&#xff0c;SQL语句不区分大小写(建议用大写) SQL语句可单行或多行书写&#xff0c;以“;”结尾 关键词不能跨多行或简写 用空格和缩进来提高语句的可读性 子句通常位于独立行&#xff0c;便于编辑&#xff0c;提高可读性 注释&#x…