2017-04-05 83 views
-1

我有一個表單上傳文件。我的控制器: -上傳文件,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被保存爲(任何名字),但以壓縮格式。

+0

只是做它解壓縮文件。 [示例1](http://www.journaldev.com/957/java-zip-file-folder-example) - [示例2](http://stackoverflow.com/questions/37404541/create-one-zip -file-使用-A-設置的-PDF文件) – Patrick

回答

0

這裏是oracle article

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(); 
    } 
} 
} 
0

您需要使用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

相關問題