c ++ - 错误解压缩文件(无zip存档)

时间:2017-08-07 14:01:02

标签: java c++ zip base64

我有一个REST API,它有一个客户端(java)和服务器(c ++),它们之间的通信是使用JSON。

在java中,我收到一个base64字符串。此字符串是编码的zip存档。我选择了这个字符串,对base64进行解码并使用zip存档创建一个文件夹。

Java代码:

Path rootDirectory = FileSystems.getDefault().getPath("/home/myName/driversFolder");
Path tempDirectory = Files.createTempDirectory(rootDirectory, "");
String dirPath = tempDirectory.toString();
String zipfile = "rbdkjsd4934234234adadds==" //base64 string test
FileOutputStream fos = new FileOutputStream(dirPath + "/zipf.zip");
fos.write(Base64.getDecoder().decode(tt));
fos.close();

如果我转到文件夹/home/myName/driversFolder/84342249949948434224994994是一个临时文件夹),我可以看到一个zip(zipf.zip)存档,在zip中我有内容。所以base64解码器工作正常。

现在在我的服务器中,我需要转到上一个文件夹并解压缩该文件。我正在使用libzip

这是我打开zip存档的代码:

struct zip *z;
struct zip_file *zf;
struct zip_stat sb;
int err = 0;
int len;
int fd;
char buf[100];

std::string zipfile = "/home/myName/driversFolder/8434224994994/zipf.zip";

if ( (z = zip_open(zipfile.c_str(), 0, &err)) == NULL )
{
  zip_error_to_str(buf, sizeof(buf), err, errno);
  fprintf(stderr, "can't open zip archive `%s': %s/n", zipfile.c_str(), buf);
  return 1;
}

我收到了以下错误:

"can't open zip archive '/home/myName/driversFolder/8434224994994/zipf.zip' 
Not a zip archive"

如果我创建一个文件夹(我使用单个文件夹和其中的单个文件进行测试)并压缩到zip并尝试执行解压缩文件,则可以正常工作。但对于base64以前的zip存档,它无效。但我的zipf.zip是一个zip存档。我使用的是linux,我去归档礼节,类型是:" Zip archive (application/zip)"。

为什么在这种情况下libzip说该文件不是zip存档?这是一个zip存档!

0 个答案:

没有答案