在一些日常的网络批量维护工作中,经常需要使用ftp计划任务,定时上传或下载多个文件。对不太了解ftp命令和windows计划任务的新手来说,确实是一个很棘手的问题。今天我们来看看如何简单的实现这功能。

IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新。IIS7服务器管理工具适用于Windows操作系统和liunx操作系统;支持Ftp客户端批量操作。

下载地址:IIS7服务器管理工具

@RequestMapping("downloadsByplFromFTP")
@@ResponseBodyy
public void downloadsByplFromFTP(HttpServletRequest request, HttpServletResponse response) throws IOException{
try {
//加载FTP
initFTP();
String ryids = request.getParameter("ryid"); //id
String [] ryidResult = ryids.split(",");
//每个人问资料打包成一个文件夹,所有人的文件夹打包成一个压缩包
String workids ="";
String xm ="";
//打包
byte[] buf = new byte[2048];
File zipFile = new File("d:EntryMaterialsPl");
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
//out.setEncoding("UTF-8");
for(int m=0;m<ryidResult.length ;m++){
String ryid = ryidResult[m];
//根据id获取workid返回拼成字符串的多个id
workids = uploadToFtpService.getWorkids(ryid);
//根据id查询人员姓名
xm = uploadToFtpService.getXm(ryid);
List<UploadToFtpEntity> fileInfoList = uploadToFtpService.getFileInfo(workids);
//防止文件名中有中文时出错
System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));
for (int i=0;i< fileInfoList.size();i++) {
String cllx = fileInfoList.get(i).getCllx(); //材料类型
String name = ""; //附件名称

// 压缩包里可以包含多个文件夹
ZipEntry entry = new ZipEntry( xm+""+(i+1)+"_"+name+"."+fileInfoList.get(i).getFileExpendname());
zipOut.putNextEntry(entry);
InputStream bis = ftp.retrieveFileStream(fileInfoList.get(i).getFilePath());
if (bis != null){
int readLen = -1;
while ((readLen = bis.read(buf, 0, 1024)) != -1) {
zipOut.write(buf, 0, readLen);
}
zipOut.closeEntry();
bis.close();
ftp.completePendingCommand();
//调用ftp.retrieveFileStream这个接口后,一定要手动close掉返回的InputStream,然后再调用 completePendingCommand方法
// ,若不是按照这个顺序,则会导致后面对FTPClient的操作都失败
}
}
}
zipOut.close();
//注销FTP登陆
ftp.logout();
//关闭FTP
if (ftp.isConnected()) { ftp.disconnect(); }
//下载
int len;
FileInputStream zipInput =new FileInputStream(zipFile);
OutputStream out = response.getOutputStream();
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode("EntryMaterialsPl", "UTF-8") + ".zip");
while ((len=zipInput.read(buf))!= -1){
out.write(buf,0,len);
}
zipInput.close();
out.flush();
out.close();
//删除压缩包
zipFile.delete();
} catch (Exception e)
{
System.out.println("文件打包下载有误: " + e.getLocalizedMessage());
e.printStackTrace();
}
}

package com.neusoft.sr.web.common.controller;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FileToZip {
private static final String BASE_DIR = "";
private static final int BUFFER = 2048;
// 符号"/"用来作为目录标识判断符
private static final String PATH = "/";

private FileToZip() {
}
public static void fileToZip(String inputFileName, String outputFileName) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFileName));
//out.setEncoding("GBK"); // ###### 这句话是关键,指定输出的编码方式
File f = new File(inputFileName);
fileToZip(out, f, "");
out.close();
}
private static void fileToZip(ZipOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base.length() == 0 ? "" : base + "/";
out.putNextEntry(new ZipEntry(base));
for (int i = 0; i < fl.length; i++) {
fileToZip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[1024];
int n = in.read(buffer);
while (n != -1) {
out.write(buffer, 0, n);
n = in.read(buffer);
}
in.close();
}
}
public static void compress(File srcFile) throws Exception {
String name = srcFile.getName();
String basePath = srcFile.getParent();
String destPath = basePath + name + ".zip";
compress(srcFile, destPath);
}
public static void compress(File srcFile, File destFile) throws Exception {
// 对输出文件做CRC32校验
CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(
destFile), new CRC32());
ZipOutputStream zos = new ZipOutputStream(cos);
zos.setLevel(9);
compress(srcFile, zos, BASE_DIR);
zos.flush();
zos.close();
}
public static void compress(File srcFile, String destPath) throws Exception {
compress(srcFile, new File(destPath));
}
private static void compress(File srcFile, ZipOutputStream zos,
String basePath) throws Exception {
if (srcFile.isDirectory()) {
compressDir(srcFile, zos, basePath);
} else {
compressFile(srcFile, zos, basePath);
}
}
private static void compressDir(File dir, ZipOutputStream zos,
String basePath) throws Exception {
File[] files = dir.listFiles();
// 构建空目录
if (files.length < 1) {
ZipEntry entry = new ZipEntry(dir.getName() + PATH);
zos.putNextEntry(entry);
zos.closeEntry();
}
for (File file : files) {
// 递归压缩
//这里加上basePath就会带上当前目录,如果不加就会只打包该目录下的文件/文件夹
compress(file, zos, basePath+ dir.getName() + PATH);
}
}
private static void compressFile(File file, ZipOutputStream zos, String dir)
throws Exception {
/**
* 压缩包内文件名定义
*
* <pre>
* 如果有多级目录,那么这里就需要给出包含目录的文件名
* 如果用WinRAR打开压缩包,中文名将显示为乱码
* </pre>
*/
ZipEntry entry = new ZipEntry(dir + file.getName());
zos.putNextEntry(entry);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
file));
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
zos.write(data, 0, count);
}
bis.close();
zos.closeEntry();
}
/**
* 将文件打包成ZIP压缩文件,main方法测试
* @param args
* @throws Exception
* @throws IOException
*/
public static void main(String[] args) throws Exception {
String sourceFilePath = "E:/java/iamges-tuojin-yn/MT-GROUNPON-2/1";
String targetUrl = "E:/java/iamges-tuojin-yn.zip";
//fileToZip(sourceFilePath, targetUrl);
compress(new File(sourceFilePath), targetUrl);
System.out.println("end !!!");
}

}

压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包相关推荐

  1. FTP下载多个文件打包成一个压缩包

    @RequestMapping("downloadsByplFromFTP")     @ResponseBody     public  void downloadsByplFr ...

  2. FTP命令:下载,上传FTP服务器中的文件

    步骤 1: 建立 FTP 连接 想要连接 FTP 服务器,在命令上中先输入ftp然后空格跟上 FTP 服务器的域名 'domain.com' 或者 IP 地址例如:1.ftp domain.com2. ...

  3. kettle ftp下载插件,job ftp下载执行结果源码分析

    文章目录 kettle ftp job下载插件执行结果源码分析 问题背景 源码分析 思考: 自己开发的kettle job插件,可以往result中填入我特定的 java成员变量吗? 思路1:继承Re ...

  4. Java根据多个文件URL打包成一个压缩包下载

    直接上代码: @GetMapping("/download")public void downloadFiles(HttpServletRequest request, HttpS ...

  5. 使用FtpWebRequest 类操作(上传、下载和删除)FTP上的XML文件

    使用如下类来实现ftp上操作xml遇到如下问题: 1.在公司内网中的服务器上搭建ftp来操作,一切正常:但是,当连接客户的机器的时候,出现乱码: 2.加上WebProxy后,客户端是xml格式的,下载 ...

  6. http和ftp下载的区别

    HTTP和FTP是两种网络传输协议的缩写,FTP是File Transportation Protocol(文件传输协议)的缩写,而HTTP则是Hyper Text Transportation Pr ...

  7. Http下载与Ftp下载区别

    HTTP和FTP是两种网络传输协议的缩写,FTP是File Transportation Protocol(文件传输协议)的缩写,而HTTP则是Hyper Text Transportation Pr ...

  8. ftp 和http 区别FTP地址与HTTP地址的区别FTP下载和HTTP下载的区别之一就在与此。

    目录 ftp 和http 区别 FTP地址与HTTP地址的区别 FTP下载和HTTP下载的区别之一就在与此. ftp 和http 区别 1.定义不一样 ftp是文件传输协议,http是超文本传输协议, ...

  9. [转帖]高清下载新体验:PT下载的魅力

    想必大家已经对BT下载非常熟悉了,而现在,又有一种新的下载方式出现了,那就是PT下载.什么是PT下载?为何如此流行?今天,就让我们一起来认识一下.(刊载本文的目的是为了研究PT下载的技术原理,请勿用于 ...

最新文章

  1. iView:一套基于Vue的高质量UI组件库
  2. Darwin Streaming Server服务器mp4文件点播返回”415 Unsupported Media Type“错误
  3. java enumerator_简单介绍java Enumeration
  4. ios jenkins配置_Jenkins + TestNG 实现自助式自动化测试平台
  5. 小波变换输出变量详解
  6. SAP CRM WebClient UI Selenium UiElementHandler的实现
  7. Linux+Nginx+Apache+Atlas+Mysql+Php+Redis 分部式部署详细版
  8. # CF1572B Xor of 3(构造)
  9. quartz框架_定时任务调度框架Quartz
  10. shell 字符串
  11. Python 之 sorted()排序详解 适用于任意可迭代对象比如列表,字典等
  12. php颜色淡入代码,JavaScript_jquery 淡入淡出效果的简单实现,样式:复制代码 代码如下:nbsp - phpStudy...
  13. 论坛模块_实现功能2_实现显示版块列表与显示单个版块的功能
  14. 环路供电和继电保护的含义
  15. ROS位置导航基础之坐标变换
  16. magisk安装失败_刷入magisk+TWRP+Riru+edxposed教程!
  17. 区域化管理 让多光伏电站运维“1+1>2”
  18. 浙江小学python教材_PPT、H5、Python、大数据……浙江中小学新教材9月投用!
  19. fastapi 大型应用_fastapi使用教程
  20. return返回值详解

热门文章

  1. 常见的基于node.js的web框架
  2. 如何编写 Nagios 插件
  3. PageOffice实现js执行在线编辑时Word文档中的宏命令
  4. 三言两语说说进程调度
  5. GDI文字旋转90度
  6. DataGridView中回车键的妙用
  7. 你可能不清楚的 Vue Router 深度用法(二)
  8. LFS 8.3 中文翻译版本发布!
  9. 内存溢出之Tomcat内存配置
  10. 《Abaqus GUI程序开发指南(Python语言)》——2.5 动态类型简介