Java 上传下载 1G 以上的文件可以通过 http 协议或 ftp 实现,但是 http 协议对文件上传大小有限制,而且还不稳定,因此这里使用 ftp 上传。
ftp 上传方式有两种:
一、ASCII 传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
       但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输
二、二进制传输方式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到IBM VM系统,在对方系统上,此文件不能执行。(但是,它可以从VM系统上以二进制方式拷贝到另一macintosh,是可以执行的)。
       如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
       因此,这就意谓着知道你要传输的是什么类型的数据是重要的,下列给出一些常见文件类型的提示

文件 方式
Text file ASCII
Spreadsheet 大多是二进制
Database file 大多是二进制,也可能是ASCII
Word processor file 大多是二进制,也可能是ASCII
Program source code ASCII
Electronic mail messages ASCII
UNIX“shell archive” ASCII
UNIX“tar file” 二进制
backup file 二进制
Compressed file 二进制
Unencoded file ASCII
Excutable file 二进制
Postscript file 二进制

很多数据库程序用二进制格式存贮数据,即使数据原本是文本式。所以,除非你知道你的软件的用途,我们建议对数据库文件先用二进制方式试试。然后看看你传输的文件能否正确工作。如果不能,再试用另一方式。可执行的文件一般是二进制文件。
转至:文章出处

在写代码之前需要配置 FTP 服务,不然 FTP 用不了,具体配置百度,这个很简单。FTP 文件上传需要依赖:commons-net,我这里用的是3.6,算是比较新的了

FTP 实现文件上传下载代码如下

package com.feicuiedu.util;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 org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;/*** 使用 FTP 实现文件上传下载<br>* @author admin**/
public class FavFTPUtil {/*** 上传文件(可供Action/Controller层使用)* * @param hostname*            FTP服务器地址* @param port*            FTP服务器端口号* @param username*            FTP登录帐号* @param password*            FTP登录密码* @param pathname*            FTP服务器保存目录* @param fileName*            上传到FTP服务器后的文件名称* @param inputStream*            输入文件流* @return*/public static boolean uploadFile(String hostname, int port, String username, String password, String pathname,String fileName, InputStream inputStream) {boolean flag = false;FTPClient ftpClient = new FTPClient();ftpClient.setControlEncoding("UTF-8");try {// 连接FTP服务器ftpClient.connect(hostname, port);// 登录FTP服务器ftpClient.login(username, password);// 是否成功登录FTP服务器int replyCode = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(replyCode)) {return flag;}ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.makeDirectory(pathname);ftpClient.changeWorkingDirectory(pathname);ftpClient.storeFile(fileName, inputStream);inputStream.close();ftpClient.logout();flag = true;} catch (Exception e) {e.printStackTrace();} finally {if (ftpClient.isConnected()) {try {ftpClient.disconnect();} catch (IOException e) {e.printStackTrace();}}}return flag;}/*** 上传文件(可对文件进行重命名)* * @param hostname*            FTP服务器地址* @param port*            FTP服务器端口号* @param username*            FTP登录帐号* @param password*            FTP登录密码* @param pathname*            FTP服务器保存目录* @param filename*            上传到FTP服务器后的文件名称* @param originfilename*            待上传文件的名称(绝对地址)* @return*/public static boolean uploadFileFromProduction(String hostname, int port, String username, String password,String pathname, String filename, String originfilename) {boolean flag = false;try {InputStream inputStream = new FileInputStream(new File(originfilename));flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);} catch (Exception e) {e.printStackTrace();}return flag;}/*** 上传文件(不可以进行文件的重命名操作)* * @param hostname*            FTP服务器地址* @param port*            FTP服务器端口号* @param username*            FTP登录帐号* @param password*            FTP登录密码* @param pathname*            FTP服务器保存目录* @param originfilename*            待上传文件的名称(绝对地址)* @return*/public static boolean uploadFileFromProduction(String hostname, int port, String username, String password,String pathname, String originfilename) {boolean flag = false;try {String fileName = new File(originfilename).getName();InputStream inputStream = new FileInputStream(new File(originfilename));flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);} catch (Exception e) {e.printStackTrace();}return flag;}/*** 删除文件* * @param hostname*            FTP服务器地址* @param port*            FTP服务器端口号* @param username*            FTP登录帐号* @param password*            FTP登录密码* @param pathname*            FTP服务器保存目录* @param filename*            要删除的文件名称* @return*/public static boolean deleteFile(String hostname, int port, String username, String password, String pathname,String filename) {boolean flag = false;FTPClient ftpClient = new FTPClient();try {// 连接FTP服务器ftpClient.connect(hostname, port);// 登录FTP服务器ftpClient.login(username, password);// 验证FTP服务器是否登录成功int replyCode = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(replyCode)) {return flag;}// 切换FTP目录ftpClient.changeWorkingDirectory(pathname);ftpClient.dele(filename);ftpClient.logout();flag = true;} catch (Exception e) {e.printStackTrace();} finally {if (ftpClient.isConnected()) {try {ftpClient.logout();} catch (IOException e) {}}}return flag;}/*** 下载文件* * @param hostname*            FTP服务器地址* @param port*            FTP服务器端口号* @param username*            FTP登录帐号* @param password*            FTP登录密码* @param pathname*            FTP服务器文件目录* @param filename*            文件名称* @param localpath*            下载后的文件路径* @return*/public static boolean downloadFile(String hostname, int port, String username, String password, String pathname,String filename, String localpath) {boolean flag = false;FTPClient ftpClient = new FTPClient();try {// 连接FTP服务器ftpClient.connect(hostname, port);// 登录FTP服务器ftpClient.login(username, password);// 验证FTP服务器是否登录成功int replyCode = ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(replyCode)) {return flag;}// 切换FTP目录ftpClient.changeWorkingDirectory(pathname);FTPFile[] ftpFiles = ftpClient.listFiles();for (FTPFile file : ftpFiles) {if (filename.equalsIgnoreCase(file.getName())) {File localFile = new File(localpath + "/" + file.getName());OutputStream os = new FileOutputStream(localFile);ftpClient.retrieveFile(file.getName(), os);os.close();}}ftpClient.logout();flag = true;} catch (Exception e) {e.printStackTrace();} finally {if (ftpClient.isConnected()) {try {ftpClient.logout();} catch (IOException e) {}}}return flag;}public static void main(String[] args) {String hostname = "192.168.xx.xxx";int port = 21;String username = "admin";String password = "admin123";String originfilename = "/Users/admin/work/accessory/test/WIN10-64.GHO";boolean res = uploadFileFromProduction(hostname, port, username, password, "/test", originfilename);
//      String pathname = "E:/fileZilla";
//      String filename = "003.xlsx";
//      String localpath = "/Users/wangbt/work/accessory/OA";
//      downloadFile(hostname, port, username, password, pathname, filename, localpath);System.out.println(res + "=======");}
}

4G大文件上传是没问题的,时间大约是 十分钟,下载大文件没试过,但小文件是没问题的,改天可以试一试
转至:代码出处

Java 使用 FTP 实现大文件上传下载相关推荐

  1. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

  2. java ftp 大文件_用Java实现FTP批量大文件上传下载(二)

    2上传下载 文件的上传可以分成多线程及单线程,在单线程情况下比较简单,而在多线程的情况下,要处理的事情要多点,同时也要小心很多.下面是net.sf.jftp.net.FtpConnection的上传h ...

  3. HTML5 批量大文件上传下载

    前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...

  4. 浏览器 批量大文件上传下载

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  5. java批量上传文件_Java 批量大文件上传下载

    第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname =  ...

  6. JAVA中使用FTPClient实现文件上传下载

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...

  7. VUE 项目大文件上传下载解决方案

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  8. java操作文件_java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  9. java是怎么实现文件上传的_java怎么实现大文件上传

    Q1:javaWeb能和ftp实现大文件上传吗 java上传可以使用common-fileupload上传组件的.common-fileupload是jakarta项目组开发的一个功能很强大的上传文件 ...

最新文章

  1. Django的下载与基本命令
  2. 【Java Calendar日历类】可视化日历程序(控制台输出)
  3. 如何用纯 CSS 创作一个文本淡入淡出的 loader 动画
  4. [Linux] 安装samba
  5. 人工智能切入垂直领域 风口已至?
  6. ASA 5520配置failover及双出口
  7. matlab转python很难吗_MATLAB在逐渐被Python淘汰吗?
  8. 多管齐下,防御拒绝服务攻击
  9. 【裂缝识别】基于matlab GUI BP神经网络路面裂缝识别系统【含Matlab源码 1063期】
  10. Plus One @python
  11. [导入]CLR探索系列:Server and Workstation Garbage Collection探索(垃圾回收系列)
  12. 三星或将80%手机生产转至越南
  13. QT 如何在其他类中修改UI控件的属性?
  14. 好用的网页在线客服工具
  15. kettle日志解析_Kettle运行日志记录
  16. [生存志] 第74节 孔子集结诗经
  17. MaxDiff系列(一) 成对比较趣事
  18. 获取附近小区信息_怎么通过网上找到靠谱的租房信息?
  19. javascript语言,定义变量
  20. App Store 隐私政策网址

热门文章

  1. Vivado Synthesis failed 解决办法
  2. 非常轻量又实用的鼠标拾色器小工具
  3. 量化择时:基于经验模态分解的希尔伯特-黄变换(一)数理
  4. 强者·愈强:Qualcomm骁龙835移动平台亚洲首秀
  5. 草稿——记录一下计网学习问题以及redis学习日志
  6. Keras中模型 《th与tf的区别》、《notop的含义》
  7. 潘森(python)数据类型
  8. 阴阳师服务器维护后抽卡,阴阳师周年庆抽卡说明 怎么抽性价比最高
  9. 涂鸦智能全功能智慧植物生长系统(硬件)
  10. 【BUG】RK3568屏幕90度旋转