AWSラムダとS3 - アップロードされたPDFファイルが空白/破損しています

崑:

私は、ファイルを取得し、AWS S3上にアップロード(AWSラムダ上で実行されている)春のAppを持っています。

春のコントローラが送信しMultipartFile、それがアマゾンAPI Gatewayを使用して、AWS S3にアップロードされます私の方法に。

public static void uploadFile(MultipartFile mpFile, String fileName) throws IOException{

    String dirPath = System.getProperty("java.io.tmpdir", "/tmp");
    File file = new File(dirPath  + "/" + fileName);

    OutputStream ops = new FileOutputStream(file);
    ops.write(mpFile.getBytes());

    s3client.putObject("fakebucketname", fileName, file);

}

私は、テキストを2ページを持っているPDFファイルをアップロードしてみてください。アップロードした後、(AWS S3上の)PDFファイルが2つの空白のページがあります。

なぜ、アップロードされたPDFファイルのブランクはありますか?

私はまた、(PNGの画像のような)他のファイルで試してみました、私はそれを開いたとき、私はアップロードされた画像が破損しています。

私は、テキストファイルをアップロードしたときに働いていた唯一のものでした。

ラマ:

これは、このトリックを行うだろうことが判明。そのすべてについてのエンコード、@KunLunの助けに感謝。私のシナリオでは、ファイルは、URLにPOSTを経由してAWSに渡されたマルチパートファイル(PDF)です。

  • サーバーは、このバイトのファイルを取得します - > 0010(標準バイトは8ビットであるので、これは、権利解釈されません)
  • そう、我々はベース64でそれをエンコード - >どのような結果が重要ではありません。
  • 標準のバイトを得るためにそれをデコードする - > 0000 0010(今これは、標準のバイトで、それが適切なAWSによって解釈されます)
  • このソースは、ここにもたくさん助け- > https://www.javaworld.com/article/3240006/base64-encoding-and-decoding-in-java-8.html?page=2
        Base64.Encoder enc = Base64.getEncoder();
        byte[] encbytes = enc.encode(file.getBytes());
        for (int i = 0; i < encbytes.length; i++)
        {
            System.out.printf("%c", (char) encbytes[i]);
            if (i != 0 && i % 4 == 0)
                System.out.print(' ');
        }
        Base64.Decoder dec = Base64.getDecoder();
        byte[] barray2 = dec.decode(encbytes);
        InputStream fis = new ByteArrayInputStream(barray2);

        PutObjectResult objectResult = s3client.putObject("xxx", file.getOriginalFilename(), fis, data);

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=478692&siteId=1