java将多个文件压缩成zip包并用httpclint发送文件
package com.controller;
import sun.misc.BASE64Decoder;
import javax.xml.bind.DatatypeConverter;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import static org.springframework.util.FileCopyUtils.BUFFER_SIZE;
public class Main2 {
public static void main(String[] args) {
try {
String result="";
String uploadUrl="http://127.0.0.1:8080/upload2";
File file1 = new File("D:\\dowloadtest\\source\\1.pdf");
File file2 = new File("D:\\dowloadtest\\source\\2.pdf");
List<File> fileList = new ArrayList<File>();
fileList.add(file1);
fileList.add(file2);
String zipName = "D:\\dowloadtest\\source\\shouquanshu.zip";
toZip(fileList,zipName);
File file = new File("D:\\dowloadtest\\source\\shouquanshu.zip");
final String newLine = "\r\n";
final String boundaryPrefix = "--";
String BOUNDARY = "========7d4a6d158c9";
URL url = new URL(uploadUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
StringBuilder sb = new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
sb.append("Content-Disposition: form-data;name=\"name\"");
sb.append(newLine);
sb.append(newLine);
sb.append("linqiuyu");
sb.append(newLine);
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName()
+ "\"" + newLine);
sb.append("Content-Type:application/zip");
sb.append(newLine);
sb.append(newLine);
out.write(sb.toString().getBytes());
ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
BufferedInputStream bin = null;
byte[] bytes;
byte[] bytes1;
try {
bin = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
while (bin.read(buffer) > 0) {
bos.write(buffer);
}
bytes = bos.toByteArray();
String s1 = Base64.getEncoder().encodeToString(bytes);
bytes1 = Base64.getDecoder().decode(s1);
String str = new String(bytes, "UTF-8");
out.write(bytes1);
} finally {
bin.close();
bos.close();
}
out.write(newLine.getBytes());
byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)
.getBytes();
out.write(end_data);
out.flush();
out.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
String line = null;
while ((line = reader.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送POST请求出现异常!" + e);
e.printStackTrace();
}
}
public static void toZip(List<File> srcFiles , String outPath) throws RuntimeException, FileNotFoundException {
long start = System.currentTimeMillis();
FileOutputStream out = new FileOutputStream(new File(outPath));
ZipOutputStream zos = null ;
try {
zos = new ZipOutputStream(out);
for (File srcFile : srcFiles) {
byte[] buf = new byte[BUFFER_SIZE];
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len;
FileInputStream in = new FileInputStream(srcFile);
while ((len = in.read(buf)) != -1){
zos.write(buf, 0, len);
}
zos.closeEntry();
in.close();
}
long end = System.currentTimeMillis();
System.out.println("压缩完成,耗时:" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("zip error from ZipUtils",e);
}finally{
if(zos != null){
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}