#java #amazon-s3 #ibm-cloud #cloud-object-storage
#java #amazon-s3 #ibm-cloud #облачное хранилище объектов
Вопрос:
Я создаю большой файл Excel и при его загрузке с использованием Java SDK для хранилища объектов IBM Cloud я получаю следующее
com.ibm.cloud.objectstorage.services.s3.model.AmazonS3Exception: Request Entity Too Large (Service: Amazon S3; Status Code: 413; Error Code: 413 Request Entity Too Large; Request ID: null)
Что я делаю?
Я создал файл Excel с использованием библиотеки Apache POI, и теперь я хочу передать этот поток вывода объекта в корзину IBM COS. Как я могу этого добиться?
Код с использованием stream
public boolean uploadWorkbookObjectToBucket(Workbook wb, String fileName) {
try {
// converting the workbook to serialized output stream
ByteArrayOutputStream theBytes = new ByteArrayOutputStream(); // create a new output stream to store the object data
ObjectOutputStream serializer = new ObjectOutputStream(theBytes); // set the object data to be serialized
wb.write(serializer); // serialize the object data
serializer.flush(); // flushing
serializer.close(); // closing the serializer
InputStream stream = new ByteArrayInputStream(theBytes.toByteArray()); // convert the serialized data to a new input stream to store
// creating the metadata to upload the data
ObjectMetadata metadata = new ObjectMetadata(); // define the metadata
//metadata.setContentType("application/x-java-serialized-object"); // set the metadata
//metadata.setContentLength(theBytes.size()); // set metadata for the length of the data stream
PutObjectResult result = cos.putObject(bucketName, fileName, stream, metadata);
if(result != null) {
return true;
}
} catch(Exception e) {
logger.error("Exception while uploading file to bucket using the workbook", e);
}
return false;
}
Код с использованием диспетчера переноса
private TransferManager getTransferManager() {
return TransferManagerBuilder.standard()
.withS3Client(cos)
.withMinimumUploadPartSize(partSize)
.withMultipartCopyThreshold(thresholdSize)
.build();
}
public boolean uploadFileUsingTransferManager(Workbook wb, String fileName) throws Exception {
// converting the workbook to serialized output stream
ByteArrayOutputStream theBytes = new ByteArrayOutputStream(); // create a new output stream to store the object data
ObjectOutputStream serializer = new ObjectOutputStream(theBytes); // set the object data to be serialized
wb.write(serializer); // serialize the object data
serializer.flush(); // flushing
serializer.close(); // closing the serializer
InputStream stream = new ByteArrayInputStream(theBytes.toByteArray()); // convert the serialized data to a new input stream to store
// creating the metadata to upload the data
ObjectMetadata metadata = new ObjectMetadata(); // define the metadata
// metadata.setContentType("application/x-java-serialized-object"); // set the metadata
// metadata.setContentLength(theBytes.size()); // set metadata for the length of the data stream
TransferManager transferManager = getTransferManager();
try {
Upload transfer = transferManager.upload(bucketName, fileName, stream, metadata);
transfer.waitForCompletion();
// transfer.addProgressListener(new P);
return true;
} catch(Exception e) {
logger.error("Exception while uploading file to bucket using the workbook", e);
} finally {
transferManager.shutdownNow();
wb.close();
}
return false;
}
Комментарии:
1. Какого размера файл и можете ли вы показать код, который его загружает?
2. Добавлены мои фрагменты кода