मैं इनपुट में एक मल्टीपार्टफाइल (यानी SAMPLE.csv) लेता हूं। मुझे इसे ज़िप करना चाहिए (यानी SAMPLE.zip) और इसे FTP के माध्यम से स्टोर करना चाहिए।

public void zipAndStore(MultipartFile file) {
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ZipOutputStream zos = new ZipOutputStream(baos);
         InputStream is = file.getInputStream()) {
         ZipEntry zipEntry = new ZipEntry("SAMPLE.zip");
         zos.putNextEntry(zipEntry);
         byte[] bytes = new byte[1024];
         int length;
         while ((length = is.read(bytes)) >= 0) {
              zos.write(bytes, 0, length);
         }
         zos.closeEntry();
         storeFtp("SAMPLE.zip", new ByteArrayInputStream(baos.toByteArray()));
     } catch (Exception e) {
     }
}

storeFtp org.apache.commons.net.ftp.FTPClient.storeFile(String remote, InputStream local) विधि का उपयोग करते हैं।

समस्या यह है कि अपलोड की गई फ़ाइल दूषित है और मैं मैन्युअल रूप से डीकंप्रेस करने में असमर्थ हूं। क्या गलत है?

1
user2520969 18 अप्रैल 2020, 17:50

1 उत्तर

सबसे बढ़िया उत्तर

एक ज़िपफाइल में फ़ाइल के अंत में DirEntries और एक endLocator की एक सूची होती है (सभी ZipFileRecords के बाद, यानी कोड में ZipEntries)।

इसलिए आपको यह सुनिश्चित करने के लिए storeFtp() पर कॉल करने से पहले ज़िपफाइल को बंद करना होगा कि DirEntries और endLocator फ़ाइल में लिखे गए हैं:

zos.closeEntry();
zos.close();
storeFtp("SAMPLE.zip", new ByteArrayInputStream(baos.toByteArray()));

(मैं जावा को अच्छी तरह से नहीं जानता, इसलिए मैं पूर्ण कोड की जांच या परीक्षण नहीं कर सकता)

यह उत्तर भी देखें।

1
Danny_ds 18 अप्रैल 2020, 15:28