无法在Linux环境中解压缩zip文件

时间:2019-07-30 05:44:43

标签: java spring-boot

我在这个问题上非常受困。我试图使用unzip zip java文件。我需要使用jsp上传一个zip文件。在控制器中,它接受Multipart文件。然后,我必须将该文件unzip放置到某个位置,例如temp目录。我做了mulipartFile.transferTo('temp zipfile location'),以放置一个zip文件。在此位置下,将始终替换zip文件。此(zipcopy)将是稍后要解压缩的zip文件的源。.下面是代码段。.

String zipcopy = env.getProperty("zipFileCopier");
file.transferTo(new File(zipcopy));

file的类型为Multipart

这在Windows环境下运行良好。完全没有问题。我在application.properties环境中的Linux中更改了路径。我发现的是,它只是没有在temp目录中创建任何未解压缩的目录。我在这里调用解压缩代码:

unziputility.unzip(zipcopy, destTemp);
File extractedDir = new File(destTemp+File.separator+multipartFileName+File.separator+"local");
if(extractedDir!=null && extractedDir.exists() && extractedDir.isDirectory()) {
System.out.println("TEST");
//business logic            
}

TEST没有在Linux的环境中打印。另请注意,以上代码位于try catch块中,并使用了ex.printstackTrace方法。但是,没有发现异常。这是我的UnzipUtility课:

解压缩实用程序

package abc.xyz.re.util;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.springframework.stereotype.Component;
@Component
public class UnzipUtility {

    private static final int BUFFER_SIZE = 9096;
    public void unzip(String zipFilePath, String destDirectory) throws IOException {
        File destDir = new File(destDirectory);
        if (!destDir.exists()) {
            destDir.mkdir();
        }
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
        ZipEntry entry = zipIn.getNextEntry();
        while (entry != null) {
            String entryName = entry.getName();
            String filePath = destDirectory + File.separator + entryName;
            if (!entry.isDirectory()) {
                extractFile(zipIn, filePath);
            } else {
                File dir = new File(filePath);
                dir.mkdirs();
            }
            zipIn.closeEntry();
            entry = zipIn.getNextEntry();
        }
        zipIn.close();
    }

    private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        byte[] bytesIn = new byte[BUFFER_SIZE];
        int read = 0;
        while ((read = zipIn.read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();
    }
}

UnzipUtility上方,被lingala zip4j取代。.相同的问题。 https://github.com/srikanth-lingala/zip4j

application.properties

uploadDestTemp = /opt/temp

destDirectory = /opt/apache-tomcat-7.0.39/webapps/ROOT/root_/contents/crbt_tones

zipFileCopier = /opt/zip_download/zipfile.zip

在上面的application.properties文件中,uploadDestTemp已经创建。还会创建带有zipFileCopier文件的zipfile.zip目录

我通过制作仅用于将zip文件从一个位置解压缩到另一个位置的示例代码来重新测试了这种情况。再次在Windows中运行完美。但是在Linux中失败了。下面的代码:

package package123;

public class Test4 {
    public static void main(String[] args) {
        System.out.println("testing...");
        try {
            UnzipUtility unzipUtility = new UnzipUtility();
            String unzipLocation = "/opt/temp";
            String zipFilePath = "/opt/zip_download/zipfile.zip";
            unzipUtility.unzip(zipFilePath, unzipLocation);
        }catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}

请有人帮我解决此问题。请告诉我为什么我不能在生产Linux环境中使用此代码。

0 个答案:

没有答案