亚马逊商家履行创建货运标签

时间:2018-08-19 13:23:58

标签: java amazon-web-services zipfile

我正在尝试按照亚马逊页面上的说明从亚马逊商家履行中获取货运标签。

“要获取实际的PDF文档,您必须解码Base64编码的字符串,将其保存为扩展名为“ .zip”的二进制文件,然后从ZIP文件中提取PDF文件。 有没有人让它工作。我尝试了几件事,但是每次我得到空白的pdf时。

这是我的代码。如果我做得正确,可以请一些身体指导我

byte[] decodedBytes = Base64.decodeBase64(contents);
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("c:\\output\\asdwd.zip")));
                    //now create the entry in zip file

ZipEntry entry = new ZipEntry("asd.pdf");
zos.putNextEntry(entry);
zos.write(decodedBytes);
zos.close();  

2 个答案:

答案 0 :(得分:1)

指令要求将字节保存为扩展名为.zip的二进制文件。

您实际上正在做的是创建一个ZIP文件,并将字节数组的内容作为条目。

根据我对说明的阅读,您的代码应执行以下操作:

byte[] decodedBytes = Base64.decodeBase64(contents);
FileOutputStream fos = new FileOutputStream("c:\\output\\asdwd.zip");
fos.write(decodedBytes);
fos.close();

或更妙的是:

byte[] decodedBytes = Base64.decodeBase64(contents);
try (FileOutputStream fos = new FileOutputStream("c:\\output\\asdwd.zip")) {
    fos.write(decodedBytes);
}

然后使用ZIP工具或网络浏览器,打开asdwd.zip,找到包含PDF的条目,然后将其提取或打印。

答案 1 :(得分:0)

此处是用于在有人需要时生成运输标签的代码。

byte[] decoded = Base64.decodeBase64(contents);
                try (FileOutputStream fos = new FileOutputStream(zipFilePath + amazonOrderId + zipFileName)) {
                    fos.write(decoded);
                    fos.close();
                }

                file = new File(destDirectory + amazonOrderId + pngFile);
                if (file.exists()) {
                    file.delete();
                }
                try (OutputStream out = new FileOutputStream(destDirectory + amazonOrderId + pngFile)) {
                    try (InputStream in = new GZIPInputStream(
                            new FileInputStream(zipFilePath + amazonOrderId + zipFileName))) {
                        byte[] buffer = new byte[65536];
                        int noRead;
                        while ((noRead = in.read(buffer)) != -1) {
                            out.write(buffer, 0, noRead);
                        }
                    }
                }