我正在为亚马逊s3编写简单的上传程序,并发现了一些问题。如果我尝试从aws-console上传文件(例如tulips.jpg)到存储桶,我会在2-3秒内完成,但如果我在我的上传器中尝试,时间大约是30秒。这是我的上传函数
public class AWSfunctions implements Runnable {
TransferManager tx;
File file;
AWSfunctions(File file) throws IOException {
Config conf;
String AccessKeyId;
String SecretKey;
AWSCredentials credentials;
ClientConfiguration clientConfiguration;
conf = ConfigFactory.load();
AccessKeyId = conf.getString("AWSCredentials.AWSAccessKeyId");
SecretKey = conf.getString("AWSCredentials.AWSSecretKey");
credentials = new BasicAWSCredentials(AccessKeyId, SecretKey);
this.tx = new TransferManager(credentials);
this.file = file;
System.out.println("thread get file" + this.file.getName());
}
public void sendFile() throws IOException, InterruptedException {
Random rnd = new Random();
PutObjectRequest request = new PutObjectRequest("test-for-est", String.valueOf(rnd.nextInt()) + ".jpg", file);
long lBegin = System.currentTimeMillis();
Upload myUpload = tx.upload(request);
try {
myUpload.waitForCompletion();
file.delete();
long lEnd = System.currentTimeMillis();
long lDelta = lEnd - lBegin;
System.out.println("TA DA DAM!" + lDelta);
} catch (AmazonClientException amazonClientException) {
amazonClientException.printStackTrace();
}
}
@Override
public void run() {
try {
this.sendFile();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}然后,我尝试在互联网论坛或亚马逊文档中的许多示例中使用分块上传,但没有任何帮助。我想知道它是如何工作的,为什么从aws-console上传太快了。很抱歉我的英语不好,希望能在你的帮助下找到答案。
发布于 2014-06-17 17:14:43
这是您已经确定的一个很好的观点。实际上,亚马逊网络服务控制台在互联网范围内工作,更准确地说是亚马逊网络服务规模;在使用的亚马逊网络服务服务列表中,S3位居榜首;因此,显然会有如此多的优化、改进和大规模的设置,以完成从亚马逊网络服务控制台的上传。
将AWS控制台和自定义SDK应用程序进行比较来执行相同的操作,这不是直接的Apple与Apple的比较。
解决问题的更好方法是确定如何使用Java、您的代码等提高性能。有几个因素会影响/影响性能,如操作系统、硬件、JDK版本、AWS SDK、您的代码等。
从根本上讲,AWS控制台是Web应用程序,而您的应用程序是控制台应用程序(或从桌面运行的应用程序)。他们是两个完全不同的物种。
我可以告诉你的类比是,在Outlook.com - Web客户端中发送电子邮件的速度可能比从桌面上运行的Outlook应用程序发送邮件的速度更快。
https://stackoverflow.com/questions/24258539
复制相似问题