- 浏览: 121573 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
Odysseus_110:
terryang 写道lz加上时间也不太合适,刷新太快的话还是 ...
$.getJSON 缓存 -
ll.james:
5楼的,真管用通知公告模块A.通知公告的类型没有实现控制B.通 ...
$.getJSON 缓存 -
zranye:
这样虽然能启动,但是会出现乱码
resin 无法启动 com.caucho.config.LineConfigException: -
酒杯中的大海:
学习了!!!~
struts 文件上传 乱码 -
酒杯中的大海:
牛逼,膜拜~
struts 文件上传 乱码
这里演示的是配置好ftp服务器后,通过java程序读取硬盘文件上传(相对于通过网页控件<input type="file">获得文件上传)。首先到apache上下载 common net 包,
然后参考http://www.iteye.com/topic/139300或者http://www.iteye.com/topic/173786 提供的代码:
具体的操作类:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; public class FTPUtil { private FTPClient ftpClient; public static final int BINARY_FILE_TYPE = FTP.BINARY_FILE_TYPE; public static final int ASCII_FILE_TYPE = FTP.ASCII_FILE_TYPE; // path should not the path from root index // or some FTP server would go to root as '/'. public void connectServer(Properties ftpConfig) throws SocketException, IOException { String server = ftpConfig.getProperty("server"); String user = ftpConfig.getProperty("username"); String password = ftpConfig.getProperty("password"); int port = 21; String location = ftpConfig.getProperty("location"); connectServer(server, port, user, password, location); } public void connectServer(String server, int port, String user, String password, String path) throws SocketException, IOException { ftpClient = new FTPClient(); ftpClient.connect(server, port); System.out.println("Connected to " + server + "."); System.out.println(ftpClient.getReplyCode()); ftpClient.login(user, password); // Path is the sub-path of the FTP path if (path.length() != 0) { ftpClient.changeWorkingDirectory(path); } } //FTP.BINARY_FILE_TYPE | FTP.ASCII_FILE_TYPE // Set transform type public void setFileType(int fileType) throws IOException { ftpClient.setFileType(fileType); } //FTP.BINARY_FILE_TYPE | FTP.ASCII_FILE_TYPE // Set transform type public void setControlEncoding(String ControlEncoding) throws IOException { ftpClient.setControlEncoding(ControlEncoding); FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT); conf.setServerLanguageCode("zh"); ftpClient.configure(conf); } public void closeServer() throws IOException { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } //======================================================================= //== About directory ===== // The following method using relative path better. //======================================================================= public boolean changeDirectory(String path) throws IOException { return ftpClient.changeWorkingDirectory(path); } public boolean createDirectory(String pathName) throws IOException { return ftpClient.makeDirectory(pathName); } public boolean removeDirectory(String path) throws IOException { return ftpClient.removeDirectory(path); } // delete all subDirectory and files. public boolean removeDirectory(String path, boolean isAll) throws IOException { if (!isAll) { return removeDirectory(path); } FTPFile[] ftpFileArr = ftpClient.listFiles(path); if (ftpFileArr == null || ftpFileArr.length == 0) { return removeDirectory(path); } // for (FTPFile ftpFile : ftpFileArr) { String name = ftpFile.getName(); if (ftpFile.isDirectory()) { System.out.println("* [sD]Delete subPath ["+path + "/" + name+"]"); removeDirectory(path + "/" + name, true); } else if (ftpFile.isFile()) { System.out.println("* [sF]Delete file ["+path + "/" + name+"]"); deleteFile(path + "/" + name); } else if (ftpFile.isSymbolicLink()) { } else if (ftpFile.isUnknown()) { } } return ftpClient.removeDirectory(path); } // Check the path is exist; exist return true, else false. public boolean existDirectory(String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftpClient.listFiles(path); for (FTPFile ftpFile : ftpFileArr) { if (ftpFile.isDirectory() && ftpFile.getName().equalsIgnoreCase(path)) { flag = true; break; } } return flag; } //======================================================================= //== About file ===== // Download and Upload file using // ftpUtil.setFileType(FtpUtil.BINARY_FILE_TYPE) better! //======================================================================= // #1. list & delete operation // Not contains directory public List<String> getFileList(String path) throws IOException { // listFiles return contains directory and file, it's FTPFile instance // listNames() contains directory, so using following to filer directory. //String[] fileNameArr = ftpClient.listNames(path); FTPFile[] ftpFiles= ftpClient.listFiles(path); List<String> retList = new ArrayList<String>(); if (ftpFiles == null || ftpFiles.length == 0) { return retList; } for (FTPFile ftpFile : ftpFiles) { if (ftpFile.isFile()) { retList.add(ftpFile.getName()); } } return retList; } public boolean deleteFile(String pathName) throws IOException { return ftpClient.deleteFile(pathName); } // #2. upload to ftp server // InputStream <------> byte[] simple and See API public boolean uploadFile(String fileName, String newName) throws IOException { boolean flag = false; InputStream iStream = null; try { iStream = new FileInputStream(fileName); flag = ftpClient.storeFile(newName, iStream); } catch (IOException e) { flag = false; return flag; } finally { if (iStream != null) { iStream.close(); } closeServer(); } return flag; } public boolean uploadFile(String fileName) throws IOException { return uploadFile(fileName, fileName); } public boolean uploadFile(InputStream iStream, String newName) throws IOException { boolean flag = false; try { // can execute [OutputStream storeFileStream(String remote)] // Above method return's value is the local file stream. flag = ftpClient.storeFile(newName, iStream); } catch (IOException e) { flag = false; return flag; } finally { if (iStream != null) { iStream.close(); } } return flag; } // #3. Down load public boolean download(String remoteFileName, String localFileName) throws IOException { boolean flag = false; File outfile = new File(localFileName); OutputStream oStream = null; try { oStream = new FileOutputStream(outfile); flag = ftpClient.retrieveFile(remoteFileName, oStream); } catch (IOException e) { flag = false; return flag; } finally { oStream.close(); } return flag; } public InputStream downFile(String sourceFileName) throws IOException { return ftpClient.retrieveFileStream(sourceFileName); } }
测试类:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Properties; public class TestUpload { public static void main(String[] args) { try { Properties config = new Properties(); config.setProperty("server", "192.168.17.48"); config.setProperty("username", "admin"); config.setProperty("password", "123456"); config.setProperty("location", ""); FTPUtil client = new FTPUtil(); client.connectServer(config); //client.setFileType(client.ASCII_FILE_TYPE); client.setFileType(client.BINARY_FILE_TYPE); client.setControlEncoding("GBK"); client.uploadFile("D:\\video_1080p\\1080P\\我们Taxi3_WMVHD_Extract.wmv", "Taxi2_WMVHD_Extract.wmv"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
开始时候没有设定FileType,上传的文件老是略微大于本地文件的大小,而且上传后的文件后的文件无法打开。
使用setFileType 设置成BINARY
public static final int BINARY_FILE_TYPE = FTP.BINARY_FILE_TYPE;
public static final int ASCII_FILE_TYPE = FTP.ASCII_FILE_TYPE;
client.setFileType(client.BINARY_FILE_TYPE);
zjumty 同学在他的帖子里对这个问题做了很好的解释:
写道
传输binary文件, 由于FTPClient默认使用ASCII作为传输模式, 所有不能传输二进制文件. 通过
ftp.setFileType(FTP.BINARY_FILE_TYPE)个可以解决这个问题, 但是要在login以后执行. 因为这个方法要向服务器发送"TYPE I"命令.
开始的时候用的是setFileTransferMode, 不过不好使. 它会执行 MODE I命令, 服务器不接受.
ftp.setFileType(FTP.BINARY_FILE_TYPE)个可以解决这个问题, 但是要在login以后执行. 因为这个方法要向服务器发送"TYPE I"命令.
开始的时候用的是setFileTransferMode, 不过不好使. 它会执行 MODE I命令, 服务器不接受.
该问题解决。
参考:
http://www.iteye.com/topic/139300
http://www.iteye.com/topic/173786
发表评论
-
ant 正则表达式 换行符
2011-02-05 23:05 3086SSH上传文件的时候 报错 无法上传文件 可能是因为存在本地 ... -
ftp 文件上传 无法上传中文名称
2009-08-12 14:11 2253代码参考上一篇《ftp文件上传 文件损坏》 ... -
SCJP 5.0 Study Notes(3)
2009-07-03 22:11 859Enums <!---->· &l ... -
SCJP 5.0 Study Notes(2)
2009-07-03 21:48 956Encapsulation, coupling, cohesi ... -
C语言
2008-09-01 08:23 0(1)指针变量初始化的方法 int a;int *p=& ... -
tomcat
2008-07-08 17:38 0<Context crossContex ... -
SCJP 5.0 Study Notes(1)
2008-07-01 08:59 1047Note: Please feel free to mo ... -
SCJP notes
2008-06-23 23:12 1351The default constructor has the ... -
Computer Science
2008-06-03 15:55 1286中文名称 :计算机科学 ... -
Integer中用静态内部类所作的缓存
2008-05-22 20:49 1536今天在做一个题目时,发现一个奇怪的Integer方法。 pub ... -
图片切割的研究
2008-05-15 14:35 0切割图片 -
SCJP tips
2008-05-09 10:21 12241. Thread t1 = new Thread(&quo ...
相关推荐
在这个场景中,"FTP上传文件,缩减版..."的标题可能指的是一个简化版的FTP文件上传功能的实现,可能是为了教学或者快速实现基本的文件上传需求。 描述中提到"想写个借口,自己菜鸟,各位帮我看看,谢谢了",这表明...
10. **FTPUpdata**:这个文件可能是FTP上传的示例程序或教程,包含了解决问题的具体步骤和代码片段。它对于初学者来说是个很好的学习资源,能帮助他们理解FTP图片上传的整个流程。 总之,FTP图片上传涉及多个环节,...
FTP上传,全称为文件传输协议,是一种用于在网络上进行文件传输的标准协议。在此系统中,FTP被用来将萤石云摄像头自动截图的图片传送到远程FTP服务器。通过设置FTP服务器的地址、用户名、密码等信息,用户可以确保...
如果文件为二进制文件,则需要执行:rz -be ExampleFile.txt,以避免文件损坏。 最后,用户可以使用sz命令进行文件下载,例如:sz ExampleFile.txt,这将下载文件ExampleFile.txt到本地计算机上。 需要注意的是,...
“Ftp上传绿色小工具”是一个独立的、无需安装的便携式应用程序,专为简化和加快FTP文件上传过程而设计。该工具为用户提供了方便的文件传输方式,用户只需简单操作,即可将本地文件快捷地上传至FTP服务器。其轻量级...
在C#中,可以使用`System.Net.FtpWebRequest`类来创建FTP请求,进行文件上传和下载。 5. **HTTP/HTTPS协议** 如果涉及Web应用的文件上传下载,可能需要用到HTTP或HTTPS协议。C#提供了`System.Net.WebClient`类,这...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件的上传和下载。在网站建设和维护中,FTP工具扮演着至关重要的角色。在某些情况下,如上传包含图片、音频、视频或编译后的程序文件时...
这个FTP扩展工具通过集成这些组件,提供了一套完整的文件上传和下载解决方案,适合需要频繁进行大文件传输或者需要高级管理功能的用户。其智能扩展特性可能包括自动重试、断点续传、文件完整性校验等功能,确保了...
3. **网络传输协议**:文件上传通常涉及HTTP或FTP协议,理解这些协议的工作流程,以及如何在上传过程中处理断点续传、错误重试等问题。 4. **JavaScript编程**:掌握ExtJS库的基本用法,包括组件模型、事件驱动和...
FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在互联网上进行文件的上传和下载。在FTP传输过程中,有两种主要的文件传输模式:ASCII(文本)模式和二进制(Binary)模式,这两种模式有着不同的特性...
3. **文件上传**:在FTP客户端中,用户可以选择本地文件或目录,然后将其上传到FTP服务器。这一步骤可能涉及到文件的多线程传输,以提高速度,以及断点续传功能,以便在网络中断后能继续未完成的上传。 4. **打包...
此外,为了防止数据丢失或损坏,可以使用校验和或哈希算法来验证接收到的数据完整性。 总的来说,"传输文件实例(boost)"是一个实践项目,旨在帮助开发者掌握如何利用Boost库,尤其是Boost.Asio,来进行网络通信和...
用户通常需要使用浏览器、FTP客户端或特定的应用程序来完成文件上传。 文件下载则相反,是从服务器获取文件并存储到本地计算机上。同样,这可以通过浏览器、FTP客户端或其他下载工具来实现。下载时,用户需要提供...
FTP是一种用于在网络上进行文件传输的标准协议,它允许用户从远程服务器上传或下载文件。FTP提供了两种工作模式:主动模式和被动模式,以适应不同网络环境下的数据传输需求。HTTP则是网页浏览的基础,常用于从Web...
FTP(File Transfer Protocol)协议是Internet上用于文件传输的标准协议,它允许用户在两台计算机之间上传、下载文件。在大型文件传输时,如果因为网络问题或其他原因导致传输中断,断点续传功能就显得尤为重要。它...
6. **错误处理**:处理可能出现的错误,如文件损坏、解压失败等。 在标签"上传"和"解压"中,我们可以看到"jspapache"这个词汇。这可能是参考了Java服务器页面(JSP)和Apache软件基金会的项目。在Java Web开发中,...
标题"9_ant_通过ftp发布文件"和描述暗示了我们将探讨如何使用Ant来通过FTP(File Transfer Protocol)协议上传文件。 FTP是一种用于在互联网上传输文件的标准协议。在Ant中,我们可以使用`ftp`任务来实现这一功能。...
FTP的主要功能是在客户端和服务器之间传输文件,使得用户可以在自己的计算机(客户端)上访问远程计算机(服务器)上的文件或者将自己的文件上传到远程计算机上。 FTP作为TCP/IP协议簇的一部分,采用了典型的客户机...
5. **文件上传**:用户可以选择本地文件上传到FTP服务器。同样,上传也应该支持断点续传,以应对网络不稳定的情况。 6. **文件操作**:用户可能需要执行基本的文件操作,如重命名、删除和创建新目录。 7. **权限...