崑:
私は、ファイルを取得し、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);