我在这个问题上非常受困。我试图使用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环境中使用此代码。