TIL 2021-07-20
9251 ワード
springbootバインドs 3でファイルを非同期でアップグレードしたいです!
まずpostmanを動機として確認し、
s 3をアップロードできるかどうかを非同期で検証してみました!
s 3にアップロードし、dbにも保存しますが、?🙄
WARNログ、
あ、アップロードするファイルの長さを決めてアップロードさせていただきます.
そうしないと
InputStream を初期化 IOUtils.TOByteArray法を用いてInputStreamのbyteを初期化する[] Longタイプはバイト[]です.valueOfメソッドをLongタイプ に変換オブジェクトメタデータオブジェクトを作成し、setContentLengthメソッドを使用して を初期化します.
新しく作成する PutObjectRequestオブジェクトを、初期化NULL値のオブジェクトメタデータ期間 に入れる.
このように修正してアップロードするのは不便です.
ああ、まだ!非同期ajaxでfileを送信する場合は、
まずpostmanを動機として確認し、
s 3をアップロードできるかどうかを非同期で検証してみました!
s 3にアップロードし、dbにも保存しますが、?🙄
WARNログ、
あ、アップロードするファイルの長さを決めてアップロードさせていただきます.
そうしないと
out of memory error
が発生し、😨既存
@Override
public String uploadFile(MultipartFile file) {
String fileName = System.nanoTime()+StringUtils.cleanPath(file.getOriginalFilename());
try {
s3Client.putObject(
new PutObjectRequest(
bucket,
fileName,
file.getInputStream(),
null)
.withCannedAcl(
CannedAccessControlList.PublicRead)
);
} catch (IOException e) {
throw new FileUploadException(ExceptionEnum.FILEUPLOAD_EXCEPTION);
}
return s3Client.getUrl(bucket, fileName).toString();
}
変更
@Override
public String uploadFile(MultipartFile file) {
String fileName = System.nanoTime()+StringUtils.cleanPath(file.getOriginalFilename());
try {
InputStream is = file.getInputStream();
Long contentLength = Long.valueOf(IOUtils.toByteArray(is).length);
ObjectMetadata metaDate = new ObjectMetadata();
metaDate.setContentLength(contentLength);
s3Client.putObject(
new PutObjectRequest(
bucket,
fileName,
file.getInputStream(),
metaDate)
.withCannedAcl(
CannedAccessControlList.PublicRead)
);
} catch (IOException e) {
throw new FileUploadException(ExceptionEnum.FILEUPLOAD_EXCEPTION);
}
return s3Client.getUrl(bucket, fileName).toString();
}
新しく作成する
このように修正してアップロードするのは不便です.
ああ、まだ!非同期ajaxでfileを送信する場合は、
multipart/form-data;charset=UTF-8
を送信することを忘れないでください.😋Reference
この問題について(TIL 2021-07-20), 我々は、より多くの情報をここで見つけました https://velog.io/@malslapq/TIL-2021-07-20テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol