AWS Lambda e S3 - uploaded file pdf está em branco / corrupto

Kunlun:

Eu tenho um aplicativo Primavera (em execução no AWS Lambda) que recebe um arquivo e carrega-lo no AWS S3.

O Controlador de Primavera envia um MultipartFilepara o meu método, onde ele é carregado para AWS S3, usando Amazon API Gateway.

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);

}

Eu tento fazer upload de um arquivo PDF que tem 2 páginas com texto. Após a transferência, o arquivo PDF (em AWS S3) tem 2 páginas em branco.

Porque é que o espaço em branco arquivo PDF carregado?

Eu também tentei com outros arquivos (imagem PNG como) e quando eu abri-lo a imagem que eu carregado está corrompido.

A única coisa que funcionou foi quando eu upload de um arquivo de texto.

lama:

Acontece que isso vai fazer este truque. Seu tudo sobre codificação, graças à ajuda de @KunLun. Em meu cenário, é o arquivo multipart (pdf) que é passado para a AWS através de um POST para o URL.

        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);

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=478691&siteId=1
Recomendado
Clasificación