上传文件,zip并将其保存到内存
问题描述:
我有一个表单上传文件。我的控制器: -上传文件,zip并将其保存到内存
public class ConsentController {
@Autowired
private ConsentRepository consentRepository;
private static String UPLOADED_FOLDER = "E://java//files//"; //this directory is used to save the uploaded file
public String filepath;
@RequestMapping(value="/addconsent",headers=("content-type=multipart/*"),method = RequestMethod.POST)
public String addConsent(@RequestParam("consentstatus") String consentStatus,
@RequestParam("file")MultipartFile file,
@RequestParam("pid")Participants pid,
@RequestParam("participantsid") long participantsid,
@RequestParam("userid")User userid,
@RequestParam("consentid") long consentid
){
if(consentRepository.findByParticipants(pid)==null){
if(file.isEmpty()) {
Consent consent = new Consent(consentStatus,"null",userid,pid);
consentRepository.save(consent);
}
else{
try {
// Get the file and save it somewhere
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
//get the path of the saved filed
String filename = file.getOriginalFilename();
String filepath = Paths.get(UPLOADED_FOLDER, filename).toString();
this.filepath=filepath;
Consent consent=new Consent(consentStatus,this.filepath,userid,pid);
consentRepository.save(consent);
}catch (Exception ex){
System.out.println("Error"+ex.getMessage());
}
}
}
此代码完美上传和存储我上传的文件在e驱动器。但现在我想在将文件保存到目录之前压缩文件。现在,如果我上传images.jpg,它会上传images.jpg。我想这个images.jpg被保存为(任何名字),但以压缩格式。
答
import java.io.*;
import java.util.zip.*;
public class Zip {
static final int BUFFER = 2048;
public static void main (String argv[]) {
try {
BufferedInputStream origin = null;
FileOutputStream dest = new
FileOutputStream("c:\\zip\\myfigs.zip");
ZipOutputStream out = new ZipOutputStream(new
BufferedOutputStream(dest));
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];
// get a list of files from current directory
File f = new File(".");
String files[] = f.list();
for (int i=0; i<files.length; i++) {
System.out.println("Adding: "+files[i]);
FileInputStream fi = new
FileInputStream(files[i]);
origin = new
BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(files[i]);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0,
BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
答
您需要使用ZipOutputStream将数据写入到Java的拉链拉链演示。这里有一个例子:
public static File zip(List<File> files, String filename) {
File zipfile = new File(filename);
// Create a buffer for reading the files
byte[] buf = new byte[1024];
try {
// create the ZIP file
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
// compress the files
for(int i=0; i<files.size(); i++) {
FileInputStream in = new FileInputStream(files.get(i).getCanonicalName());
// add ZIP entry to output stream
out.putNextEntry(new ZipEntry(files.get(i).getName()));
// transfer bytes from the file to the ZIP file
int len;
while((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// complete the entry
out.closeEntry();
in.close();
}
// complete the ZIP file
out.close();
return zipfile;
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
return null;
}
这里是教程,显示如何压缩并在Java http://www.oracle.com/technetwork/articles/java/compress-1565076.html
只是做它解压缩文件。 [示例1](http://www.journaldev.com/957/java-zip-file-folder-example) - [示例2](http://*.com/questions/37404541/create-one-zip -file-使用-A-设置的-PDF文件) – Patrick