压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包
在一些日常的網(wǎng)絡(luò)批量維護(hù)工作中,經(jīng)常需要使用ftp計(jì)劃任務(wù),定時(shí)上傳或下載多個(gè)文件。對(duì)不太了解ftp命令和windows計(jì)劃任務(wù)的新手來(lái)說(shuō),確實(shí)是一個(gè)很棘手的問(wèn)題。今天我們來(lái)看看如何簡(jiǎn)單的實(shí)現(xiàn)這功能。
IIS7服務(wù)器管理工具可以批量管理、定時(shí)上傳下載、同步操作、數(shù)據(jù)備份、到期提醒、自動(dòng)更新。IIS7服務(wù)器管理工具適用于Windows操作系統(tǒng)和liunx操作系統(tǒng);支持Ftp客戶(hù)端批量操作。
下載地址:IIS7服務(wù)器管理工具
@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(",");
//每個(gè)人問(wèn)資料打包成一個(gè)文件夾,所有人的文件夾打包成一個(gè)壓縮包
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];
//根據(jù)id獲取workid返回拼成字符串的多個(gè)id
workids = uploadToFtpService.getWorkids(ryid);
//根據(jù)id查詢(xún)?nèi)藛T姓名
xm = uploadToFtpService.getXm(ryid);
List<UploadToFtpEntity> fileInfoList = uploadToFtpService.getFileInfo(workids);
//防止文件名中有中文時(shí)出錯(cuò)
System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));
for (int i=0;i< fileInfoList.size();i++) {
String cllx = fileInfoList.get(i).getCllx(); //材料類(lèi)型
String name = ""; //附件名稱(chēng)
// 壓縮包里可以包含多個(gè)文件夾
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();
//調(diào)用ftp.retrieveFileStream這個(gè)接口后,一定要手動(dòng)close掉返回的InputStream,然后再調(diào)用 completePendingCommand方法
// ,若不是按照這個(gè)順序,則會(huì)導(dǎo)致后面對(duì)FTPClient的操作都失敗
}
}
}
zipOut.close();
//注銷(xiāo)FTP登陸
ftp.logout();
//關(guān)閉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;
// 符號(hào)"/"用來(lái)作為目錄標(biāo)識(shí)判斷符
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"); // ###### 這句話(huà)是關(guān)鍵,指定輸出的編碼方式
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 {
// 對(duì)輸出文件做CRC32校驗(yàn)
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();
// 構(gòu)建空目錄
if (files.length < 1) {
ZipEntry entry = new ZipEntry(dir.getName() + PATH);
zos.putNextEntry(entry);
zos.closeEntry();
}
for (File file : files) {
// 遞歸壓縮
//這里加上basePath就會(huì)帶上當(dāng)前目錄,如果不加就會(huì)只打包該目錄下的文件/文件夾
compress(file, zos, basePath+ dir.getName() + PATH);
}
}
private static void compressFile(File file, ZipOutputStream zos, String dir)
throws Exception {
/**
* 壓縮包內(nèi)文件名定義
*
* <pre>
* 如果有多級(jí)目錄,那么這里就需要給出包含目錄的文件名
* 如果用WinRAR打開(kāi)壓縮包,中文名將顯示為亂碼
* </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方法測(cè)試
* @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 !!!");
}
}
總結(jié)
以上是生活随笔為你收集整理的压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python数独游戏源代码100行_py
- 下一篇: python自动化弹框_Python+w