Я работаю над приложением, где пользователь будет загружать ZIP-файл на мой сервер, на сервере будет расшифрован ZIP-файл, а затем мне нужно загрузить его на сервер. Теперь мои вопросы: как загрузить каталог с несколькими файлами и подпапками с помощью Java в S3? Есть ли примеры для этого? В настоящее время я использую JetS3t для управления всеми своими сообщениями с S3.Загрузить каталог с файлами на S3 с помощью Java
ответ
Я построил нечто очень похожее. После расширения zip на сервере вызовите FileUtils.listFiles(), который будет рекурсивно отображать файлы в папке. Просто переберите список и создайте s3объекты и загрузите файлы на s3. Используйте службу threadedstorage, чтобы одновременно загружать несколько файлов. Также убедитесь, что вы обрабатываете события загрузки. Если некоторые файлы не могут быть загружены, вам сообщит библиотека jets3t. Я мог бы опубликовать код, который я написал, однажды попав в офис.
EDIT: КОД:
Вот код:
private static ProviderCredentials credentials;
private static S3Service s3service;
private static ThreadedS3Service storageService;
private static S3Bucket bucket;
private List<S3Object> s3Objs=new ArrayList<S3Object>();
private Set<String> s3ObjsCompleted=new HashSet<String>();
private boolean isErrorOccured=true;
private final ByteFormatter byteFormatter = new ByteFormatter();
private final TimeFormatter timeFormatter = new TimeFormatter();
private void initialise() throws ServiceException, S3ServiceException {
credentials=<create your credentials>;
s3service = new RestS3Service(credentials);
bucket = new S3Bucket(<bucket details>);
storageService=new ThreadedS3Service(s3service, this);
}
}
private void uploadFolder(File folder) throws NoSuchAlgorithmException, IOException {
readFolderContents(folder);
uploadFilesInList(folder);
}
private void readFolderContents(File folder) throws NoSuchAlgorithmException, IOException {
Iterator<File> filesinFolder=FileUtils.iterateFiles(folder,null,null);
while(filesinFolder.hasNext()) {
File file=filesinFolder.next();
String key = <create your key from the filename or something>;
S3Object s3Obj=new S3Object(bucket, file);
s3Obj.setKey(key);
s3Obj.setContentType(Mimetypes.getInstance().getMimetype(s3Obj.getKey()));
s3Objs.add(s3Obj);
}
}
private void uploadFilesInList(File folder) {
logger.debug("Uploading files in folder "+folder.getAbsolutePath());
isErrorOccured=false;
s3ObjsCompleted.clear();
storageService.putObjects(bucket.getName(), s3Objs.toArray(new S3Object[s3Objs.size()]));
if(isErrorOccured || s3Objs.size()!=s3ObjsCompleted.size()) {
logger.debug("Have to try uploading a few objects again for folder "+folder.getAbsolutePath()+" - Completed = "+s3ObjsCompleted.size()+" and Total ="+s3Objs.size());
List<S3Object> s3ObjsRemaining=new ArrayList<S3Object>();
for(S3Object s3Obj : s3Objs) {
if(!s3ObjsCompleted.contains(s3Obj.getKey())) {
s3ObjsRemaining.add(s3Obj);
}
}
s3Objs=s3ObjsRemaining;
uploadFilesInList(folder);
}
}
@Override
public void event(CreateObjectsEvent event) {
super.event(event);
if (ServiceEvent.EVENT_IGNORED_ERRORS == event.getEventCode()) {
Throwable[] throwables = event.getIgnoredErrors();
for (int i = 0; i < throwables.length; i++) {
logger.error("Ignoring error: " + throwables[i].getMessage());
}
}else if(ServiceEvent.EVENT_STARTED == event.getEventCode()) {
logger.debug("**********************************Upload Event Started***********************************");
}else if(event.getEventCode()==ServiceEvent.EVENT_ERROR) {
isErrorOccured=true;
}else if(event.getEventCode()==ServiceEvent.EVENT_IN_PROGRESS) {
StorageObject[] storeObjs=event.getCreatedObjects();
for(StorageObject storeObj : storeObjs) {
s3ObjsCompleted.add(storeObj.getKey());
}
ThreadWatcher watcher = event.getThreadWatcher();
if (watcher.getBytesTransferred() >= watcher.getBytesTotal()) {
logger.debug("Upload Completed.. Verifying");
}else {
int percentage = (int) (((double) watcher.getBytesTransferred()/watcher.getBytesTotal()) * 100);
long bytesPerSecond = watcher.getBytesPerSecond();
StringBuilder transferDetailsText=new StringBuilder("Uploading.... ");
transferDetailsText.append("Speed: " + byteFormatter.formatByteSize(bytesPerSecond) + "/s");
if (watcher.isTimeRemainingAvailable()) {
long secondsRemaining = watcher.getTimeRemaining();
if (transferDetailsText.length() > 0) {
transferDetailsText.append(" - ");
}
transferDetailsText.append("Time remaining: " + timeFormatter.formatTime(secondsRemaining));
}
logger.debug(transferDetailsText.toString()+" "+percentage);
}
}else if(ServiceEvent.EVENT_COMPLETED==event.getEventCode()) {
logger.debug("**********************************Upload Event Completed***********************************");
if(isErrorOccured) {
logger.debug("**********************But with errors, have to retry failed uploads**************************");
}
}
}
Благодаря Sethu. Оно работает! одна вещь, которая не работает, - это создание подкаталогов. То, что он делает, делает все плоской. Вы не знаете, почему это происходит? Создает ли ваш код подкаталоги в вашем S3? Еще одна вещь. В вашем коде мне пришлось изменить FileUtils.iterateFiles (папка, null, null); в FileUtils.iterateFiles (папка, null, true); – Maksim
О, неважно. Я просто понял, что ключ файла будет иметь каталог (например, images/image.jpg). Вот что я сделал в своем коде: file.getAbsolutePath(). ReplaceAll (filePath + "/", ""); – Maksim
HI Это простой способ, чтобы загрузить каталог в S3 ведро.
BasicAWSCredentials awsCreds = new BasicAWSCredentials(access_key_id,
secret_access_key);
AmazonS3 s3Client = new AmazonS3Client(awsCreds);
TransferManager tm = new TransferManager(s3Client);
MultipleFileUpload upload = tm.uploadDirectory(existingBucketName,
"BuildNumber#1", "FilePathYouWant", true);
** Видеопоток ** 'FileInputStream stream = новый FileInputStream (vedio_filepath); \t ObjectMetadata objectMetadata = new ObjectMetadata(); \t PutObjectRequest putObjectRequest = new PutObjectRequest ( \t s3_BucketName, location_KEY, stream, objectMetadata); ' – Yash
- 1. Загрузить файл на S3 с помощью java
- 2. Удалить каталог Carrierwave S3 с обработанными файлами
- 3. aws s3 php: не удается загрузить каталог с помощью UploadSyncBuilder
- 4. Загрузить каталог в папку в корзине с помощью javascript S3
- 5. Как синхронизировать каталог с AWS S3 с помощью Java SDK?
- 6. Загрузить на S3 с помощью Gzip в Java
- 7. Загрузить на Amazon S3 с помощью tinys3
- 8. Загрузить файл на S3 с помощью Faraday
- 9. Как загрузить каталог с sftp
- 10. Загрузить на S3 с BOM
- 11. Как загрузить частичный файл с s3 [Java]
- 12. Zip весь каталог на S3
- 13. Проблема с файлами LZO на S3
- 14. загрузить каталог с помощью проблемы с webkitdirectory
- 15. Загрузить файл с S3 на Youtube с помощью Node.js
- 16. Как загрузить онлайн-каталог файлов (localhost) с помощью Java
- 17. Управление файлами на Amazon S3
- 18. Загрузить изображение с помощью Amazon S3
- 19. Как загрузить всю папку на S3 Bucket?
- 20. Загрузить каталог изображений с amazon s3 в адаптер для Android
- 21. Как загрузить каталог/файл с помощью SSH?
- 22. Как загрузить ftp-каталог с помощью ruby
- 23. NullReferenceException при попытке загрузить каталог на S3 (.NET API - C#)
- 24. Как загрузить загруженный файл-объект из S3 в локальный каталог
- 25. Загрузить каталог с QFtp
- 26. Загрузить каталог из ftp с помощью perl
- 27. Как загрузить каталог с помощью node.js?
- 28. Загрузить каталоги S3 на FTP
- 29. Загрузить изображение на S3 с помощью назначенного URL-адреса
- 30. Как загрузить изображение на S3 с помощью AWSUserFileManager Swift iOS
http://jets3t.s3.amazonaws.com/toolkit/code-samples.html#uploading –