- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试开发一个上传管理器(可安装在您的 PC 上,而不是一个网络应用程序),它将使用 Java 将选定的图像文件上传到 AmazonS3。现在,我已经完成编码,它将初始化上传并使用 AmazonS3 的 TransferManager(高级 API)暂停上传。问题是,每次我恢复上传时,它都从头开始。我看过几个 aws 博客和 aws 文档,但没有直接回答这个问题。我还用低级 API 编写了代码(使用他们的示例代码),但在那里,我不知道如何暂停上传。所以,我的问题是:
我有两个按钮(使用 JFrames 和 Swing Worker),名为暂停和恢复。我应该怎么做才能重复暂停和恢复?如何实现代码?
public class UploadObjectMultipartUploadUsingHighLevelAPI {
public void pauseUploading(TransferManager tm, Upload upload) throws Exception{
long MB = 1024 * 1024 ;
TransferProgress progress = upload.getProgress();
System.out.println("The pause will occur once 5 MB of data is uploaded");
while( progress.getBytesTransferred() < 5*MB )
Thread.sleep(2000);
boolean forceCancel = true;
float dataTransfered = (float) upload.getProgress().getBytesTransferred();
System.out.println("Data Transfered until now: " + dataTransfered);
PauseResult<PersistableUpload> pauseResult = ((Upload) upload).tryPause(forceCancel);
System.out.println("The upload has been paused. The code that we've got is " + pauseResult.getPauseStatus());
pauseResult = ((Upload) upload).tryPause(forceCancel);
PersistableUpload persistableUpload = (PersistableUpload) pauseResult.getInfoToResume();
System.out.println("Storing information into file");
File f = new File("D:\\Example\\resume-upload");
if( !f.exists() )
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
persistableUpload.serialize(fos);
fos.close();
}
public void resumeUploading(TransferManager tm) throws Exception{
FileInputStream fis = new FileInputStream(new File("D:\\Example\\resume-upload"));
System.out.println("Reading information from the file");
PersistableUpload persistableUpload;
persistableUpload = PersistableTransfer.deserializeFrom(fis);
System.out.println("Reading information completed");
System.out.println("The system will resume upload now");
tm.resumeUpload(persistableUpload);
fis.close();
// System.out.println("Upload complete.");
}
public static void main(String[] args) throws Exception {
String existingBucketName = "Business.SkySquirrel.RawImages/Test";
String keyName = "Pictures1.zip";
String filePath = "D:\\Pictures1.zip";
TransferManagerConfiguration configuration = new TransferManagerConfiguration();
TransferManager tm = new TransferManager(new ProfileCredentialsProvider());
configuration.setMultipartUploadThreshold(1024 * 1024);
tm.setConfiguration(configuration);
System.out.println("************* Upload Manager *************");
try {
Upload upload = tm.upload(existingBucketName, keyName, new File(filePath));
System.out.println("Upload Started");
System.out.println("Transfer: " + upload.getDescription());
UploadObjectMultipartUploadUsingHighLevelAPI multipartPause =
new UploadObjectMultipartUploadUsingHighLevelAPI();
multipartPause.pauseUploading(tm, upload);
UploadObjectMultipartUploadUsingHighLevelAPI multipartResume =
new UploadObjectMultipartUploadUsingHighLevelAPI();
multipartResume.resumeUploading(tm);
}
catch (AmazonClientException amazonClientException) {
System.out.println("Unable to upload file, upload was aborted.");
amazonClientException.printStackTrace();
}
}
}
我会很感激使用 AmazonS3 的高级或低级 API 的示例代码。
我使用的是 1.8.9.1 版本的 SDK。我还在使用以下代码初始化上传、暂停和恢复时添加了进度。
long MB = 1024 * 1024;
TransferProgress progress = upload.getProgress();
float dataTransfered = progress.getBytesTransferred();
while(!upload.isDone()){
dataTransfered = progress.getBytesTransferred();
System.out.println("Data Transfered: " + dataTransfered/MB + " MB");
Thread.sleep(2000);
}
我得到了以下结果:
密码匹配选择了以下文件:
D:\Pictures3\DSC02247 - Copy.JPG
Writing 'D:\Pictures3\DSC02247 - Copy.JPG' to zip file
D:\Pictures3\DSC02247.JPG
Writing 'D:\Pictures3\DSC02247.JPG' to zip file
D:\Pictures3\DSC02248.JPG
Writing 'D:\Pictures3\DSC02248.JPG' to zip file
************* Upload Manager *************
Upload Started
Transfer: Uploading to *******/****/****.zip
Data Transfered: 0.0 MB
Data Transfered: 0.0703125 MB
Data Transfered: 0.21875 MB
Data Transfered: 0.3203125 MB
Data Transfered: 0.4140625 MB
Data Transfered: 0.515625 MB
....
....
Data Transfered: 0.9609375 MB
Data Transfered: 1.0546875 MB
Pause Commencing
The pause will occur once 5 MB of data is uploaded
Data Transfered: 1.09375 MB
Data Transfered: 1.1640625 MB
Data Transfered: 1.265625 MB
Data Transfered: 1.359375 MB
....
....
Data Transfered: 4.734375 MB
Data Transfered: 4.8359375 MB
Data Transfered: 4.9296875 MB
The upload has been paused. The code that we've got is SUCCESS
Storing information into file
Upload Paused
Resume Commencing
Reading information from the file
Reading information completed
The system will resume upload now
Data Transfered: 0.0 MB
Data Transfered: 0.171875 MB
Data Transfered: 0.265625 MB
Data Transfered: 0.359375 MB
Data Transfered: 0.421875 MB
....
....
Data Transfered: 9.58182 MB
Data Transfered: 9.683382 MB
Data Transfered: 9.753695 MB
Upload Complete
最佳答案
使用 REST API,这非常简单……您可以通过不再发送任何部分来“暂停”,然后通过发送下一部分来“恢复”。
“低级 API”与 REST 接口(interface)紧密对应,因此功能应该相同。 S3 在内部没有“暂停”分段上传的概念。它只是无限期地等待您上传更多部分并完成请求,或者中止请求。它将存储您发送的部分(存储费用),直到整个操作完成或中止...它实际上会等待个月(我已经看到了...并且据推测,它将永远等待您“恢复”。
但是没有低级别的暂停/恢复调用——您只需执行即可。
要注意的是,您必须在本地保留每个部分的 etag,并且必须将它们与完成分段上传的请求一起发送。
如果您从未完成或中止一个多部分操作,您发送的部分将由 S3 存储,等待您的下一步行动。
http://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.html
关于java - 我可以使用 Amazon 高级或低级 API 暂停和恢复分段上传吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756687/
对于相当简单的表结构,即。人员、标准和 PersonCriteria(组合表),我现在设置了一个查询,选择所有符合所有选定条件的人。 此时查询本身看起来像这样: SELECT p.PersonID
我在使用高级 SQL 查询时遇到了一些问题,而且我已经有很长时间没有使用 SQL 数据库了。我们使用 MySQL。 背景: 我们将使用两个表: “交易表” 表:expire_history +----
我找不到错误。也许你可以帮助我:我的代码如下: var data = {"product":[{"config":[{"id":"1","price":"100","sku":"1054879634
我有一个列表列表的列表(最后一个列表并不重要) data = [[[['f', 0], 'C'], [['X', 0], 'X']], [[['s', 1], 'X'], [['X', 0], 'X'
我想准备将使用表格的 session ,并在另一个网站上将新项目添加到 session 中。 默认.cs string[] tab = new string[100];
我知道有一些像: Bubble sort Insertion sort Shell sort Merge sort Heapsort Quicksort Bucket sort Radix sort
像https://softwareengineering.stackexchange.com/questions/150616/return-random-list-item-by-its-weigh
我正在开发一个 posix 脚本 (Linux),它获取一个网页,将内容存储在一个变量中并查找字符串“SUCCESS”。如果找到字符串,则不执行循环内容,如果没有找到字符串,则反复执行循环,直到找到为
我不确定这个问题是否已在其他地方得到解答,而且我似乎无法通过谷歌找到任何不是“Hello World”示例的内容...我正在使用 C# .NET 4.0 进行编码。 我正在尝试开发一个控制台应用程序,
我创建了一个房地产网站,我希望按照列表的最后更新和完整性对列表进行排序。所以我一直想弄清楚如何结合最近更新的列表按mysql中的字段(completion_score)进行排序。完成分数将采用 1
只所以称为“高级”用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法! switch 语句和具有同样表达式的一系列的 IF 语句相似。很多场合下需要把同一
之前的章节中,我们学习了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 方法从 XML 文档中取回数据 本章节我们将继续学习其它重要的 XML DOM
我对我尝试编写的 SQL 查询有疑问。 我需要从数据库中查询数据。该数据库除其他外,还包括以下 3 个字段: Account_ID #, Date_Created, Time_Created 我需要编
我正在使用非常激进的视频压缩,例如 -crf 51 .我将其用于“艺术”效果,因此从普通视频压缩的角度来看,我所做的可能没有意义。 到目前为止,我只使用了非常基本的压缩控制,只使用了 -crf。或 -
我真的在学习 lucene 和 ravendb 上的绳索 - 我在 Raven 中有以下文档 - { "InternalEvent": { "Desec": "MachineInfo: 1
通常 grep 命令用于显示包含指定模式的行。有没有办法在包含指定模式的行之前和之后显示 n 行? 这可以使用awk来实现吗? 最佳答案 是的,使用 grep -B num1 -A num2 在匹配之
我搜索了高低,并尝试了几个小时来操纵似乎适合的各种其他查询,但我没有快乐。 我试图加入 Microsoft SQL Server 2005 中的几个表,其中一个示例是: Company Table (
我有一个如下所示的 XML 文件: teacher1Name
我将如何在 CF 中创建此语句? 显然括号不起作用,但说明了我想要完成的工作。这是什么语法? 编辑: 好的,我了解如何使用 EQ 等等。我有点匆忙地发布了这个。我的问题是关于括号。以这种方式使用它们
主要问题:我需要使用具体对象结构对任何对象结构进行类型扩展。 我在 VS Code 中测试的默认值。 我的解决方案: /** @template A @typedef {{[Ki in keyof A
我是一名优秀的程序员,十分优秀!