获得java上传文件目录_使用Java将包含文件的目录上载到S3

我建造的东西非常相似.在服务器上展开zip后,调用FileUtils.listFiles(),它将以递归方式列出文件夹中的文件.只需迭代列表并创建s3objects并将文件上传到s3.使用threadedstorage服务,以便可以同时上载多个文件.还要确保您处理上传事件.如果某些文件无法上传,jets3t库会告诉你.

我可以在进入办公室后发布我写的代码.

编辑:代码:

这是代码:

private static ProviderCredentials credentials;

private static S3Service s3service;

private static ThreadedS3Service storageService;

private static S3Bucket bucket;

private List s3Objs=new ArrayList();

private Set s3ObjsCompleted=new HashSet();

private boolean isErrorOccured=true;

private final ByteFormatter byteFormatter = new ByteFormatter();

private final TimeFormatter timeFormatter = new TimeFormatter();

private void initialise() throws ServiceException, S3ServiceException {

credentials=;

s3service = new RestS3Service(credentials);

bucket = new S3Bucket();

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 filesinFolder=FileUtils.iterateFiles(folder,null,null);

while(filesinFolder.hasNext()) {

File file=filesinFolder.next();

String key = ;

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 s3ObjsRemaining=new ArrayList();

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

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值