当前位置:   article > 正文

亚马逊云计算平台---------AWS(三) S3 存储桶中 上传下载删除文件 Java代码实现_java 通过s3协议上传下载

java 通过s3协议上传下载

    上一篇由于时间仓促,写了一个在S3上上传下载文件的客户端说明。但是在实际的开发中我们肯定不需要手动操作,要通过代码来进行实现。

Java 在S3上传文件的前提

1. 已经创建aws账号

2. 已经在aws中创建用户, 并同时获得 AWS_ACCESS_KEY 和AWS_SECRET_KEY

3. 在S3中已经创建好桶,不过没有创建好,代码中也有提现。

Java在S3上操作的工具代码

  1. import java.io.BufferedReader;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStreamWriter;
  9. import java.io.Writer;
  10. import java.util.zip.GZIPInputStream;
  11. import com.amazonaws.AmazonClientException;
  12. import com.amazonaws.auth.AWSCredentials;
  13. import com.amazonaws.auth.BasicAWSCredentials;
  14. import com.amazonaws.auth.profile.ProfileCredentialsProvider;
  15. import com.amazonaws.services.s3.AmazonS3;
  16. import com.amazonaws.services.s3.AmazonS3Client;
  17. import com.amazonaws.services.s3.model.Bucket;
  18. import com.amazonaws.services.s3.model.GetObjectRequest;
  19. import com.amazonaws.services.s3.model.ObjectListing;
  20. import com.amazonaws.services.s3.model.ObjectMetadata;
  21. import com.amazonaws.services.s3.model.PutObjectRequest;
  22. import com.amazonaws.services.s3.model.S3Object;
  23. import com.amazonaws.services.s3.model.S3ObjectSummary;
  24. import com.amazonaws.services.s3.transfer.TransferManager;
  25. import com.amazonaws.services.s3.transfer.Upload;
  26. /**
  27. * @author DELL
  28. * @Desc S3上传文件客户端
  29. */
  30. public class S3AwsClient {
  31. private static String AWS_ACCESS_KEY = "自己是key";
  32. private static String AWS_SECRET_KEY = "自己的ID";
  33. private static final String bucketName = "自己创建的桶名称";
  34. private static AmazonS3 s3;
  35. private static TransferManager tx;
  36. /**
  37. * 通过default方法连接aws
  38. * @throws Exception
  39. */
  40. private static void init() throws Exception {
  41. AWSCredentials credentials = null;
  42. try {
  43. credentials = new ProfileCredentialsProvider("default").getCredentials();
  44. } catch (Exception e) {
  45. throw new AmazonClientException("Exception on credentials.", e);
  46. }
  47. s3 = new AmazonS3Client(credentials);
  48. //Region usWest2 = Region.getRegion(Regions.US_WEST_2);
  49. //s3.setRegion(usWest2);
  50. tx = new TransferManager(s3);
  51. }
  52. /**
  53. * 通过在代码中包含 access key id 和 secret access key 连接 aws
  54. * @throws Exception
  55. */
  56. private static void init_with_key() throws Exception {
  57. AWSCredentials credentials = null;
  58. credentials = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
  59. s3 = new AmazonS3Client(credentials);
  60. //Region usWest2 = Region.getRegion(Regions.US_WEST_2);
  61. //s3.setRegion(usWest2);
  62. tx = new TransferManager(s3);
  63. }
  64. /**
  65. * 用于创建一个名为bucketName的s3 bucket
  66. * @param bucketName
  67. */
  68. private static void createBucket(String bucketName) {
  69. if(s3.doesBucketExist(bucketName) == true) {
  70. System.out.println(bucketName + " already exist!");
  71. return;
  72. }
  73. System.out.println("creating " + bucketName + " ...");
  74. s3.createBucket(bucketName);
  75. System.out.println(bucketName + " has been created!");
  76. }
  77. /**
  78. * 列出名为bucketName的bucket里面的所有object
  79. * @param bucketName
  80. */
  81. private static void listObjects(String bucketName) {
  82. System.out.println("Listing objects of " + bucketName);
  83. ObjectListing objectListing = s3.listObjects(bucketName);
  84. int objectNum = 0;
  85. for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
  86. System.out.println(" - " + objectSummary.getKey());
  87. objectNum ++;
  88. }
  89. System.out.println("total " + objectNum + " object(s).");
  90. }
  91. /**
  92. * 判断名为bucketName的bucket里面是否有一个名为key的object
  93. * @param bucketName
  94. * @param key
  95. * @return
  96. */
  97. private static boolean isObjectExit(String bucketName, String key) {
  98. int len = key.length();
  99. ObjectListing objectListing = s3.listObjects(bucketName);
  100. String s = new String();
  101. for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
  102. s = objectSummary.getKey();
  103. int slen = s.length();
  104. if(len == slen) {
  105. int i;
  106. for(i=0;i<len;i++) {
  107. if(s.charAt(i) != key.charAt(i)) {
  108. break;
  109. }
  110. }
  111. if(i == len) {
  112. return true;
  113. }
  114. }
  115. }
  116. return false;
  117. }
  118. /**
  119. * 在本地创建一个名为filename的文件,输入一些信息后,将其传到名为bucketName的s3 bucket里面去
  120. * @param bucketName
  121. * @param filename
  122. * @throws IOException
  123. */
  124. private static void createSampleFile(String bucketName, String filename) throws IOException {
  125. if(isObjectExit(bucketName, filename) == true) {
  126. System.out.println(filename +" already exists in " + bucketName + "!");
  127. return;
  128. }
  129. System.out.println("creating file " + filename);
  130. File file = new File(filename);
  131. file.deleteOnExit();
  132. Writer writer = new OutputStreamWriter(new FileOutputStream(file));
  133. writer.write("abcdefghijklmnopqrstuvwxyz\n");
  134. writer.write("01234567890112345678901234\n");
  135. writer.write("!@#$%^&*()-=[]{};':',.<>/?\n");
  136. writer.write("01234567890112345678901234\n");
  137. writer.write("abcdefghijklmnopqrstuvwxyz\n");
  138. writer.close();
  139. s3.putObject(bucketName, filename, file);
  140. System.out.println("create sample file " + filename + " succeed!");
  141. }
  142. /**
  143. * 输出"s3://"+bucketname+"/"key对应的object对应的信息
  144. * @param bucketName
  145. * @param key
  146. */
  147. private static void showContentOfAnObject(String bucketName, String key) {
  148. S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
  149. InputStream input = object.getObjectContent();
  150. BufferedReader reader = new BufferedReader(new InputStreamReader(input));
  151. try {
  152. while (true) {
  153. String line = reader.readLine();
  154. if (line == null) {
  155. break;
  156. }
  157. System.out.println(" " + line);
  158. }
  159. System.out.println();
  160. } catch (IOException e) {
  161. e.printStackTrace();
  162. }
  163. }
  164. /**
  165. * 输出"s3://"+bucketname+"/"key对应的object对应的信息(这个object对应的文件时gzip格式的)
  166. * @param bucketName
  167. * @param key
  168. */
  169. private static void showContentOfAnGzipObject(String bucketName, String key) {
  170. try {
  171. S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
  172. InputStream input = new GZIPInputStream(object.getObjectContent());
  173. BufferedReader reader = new BufferedReader(new InputStreamReader(input));
  174. while (true) {
  175. String line = reader.readLine();
  176. if (line == null) {
  177. break;
  178. }
  179. System.out.println(" " + line);
  180. }
  181. System.out.println();
  182. } catch (IOException e) {
  183. e.printStackTrace();
  184. }
  185. }
  186. /**
  187. * 列出我的s3上所有的bucket的名字
  188. */
  189. private static void listBuckets() {
  190. System.out.println("Listing buckets");
  191. int bucketNum = 0;
  192. for(Bucket bucket : s3.listBuckets()) {
  193. System.out.println(" - " + bucket.getName());
  194. bucketNum ++;
  195. }
  196. System.out.println("total " + bucketNum + " bucket(s).");
  197. }
  198. /**
  199. * 删除一个名为bucketName的bucket
  200. * @param bucketName
  201. */
  202. private static void deleteBucket(String bucketName) {
  203. if(s3.doesBucketExist(bucketName) == false) {
  204. System.out.println(bucketName + " does not exists!");
  205. return;
  206. }
  207. System.out.println("deleting " + bucketName + " ...");
  208. ObjectListing objectListing = s3.listObjects(bucketName);
  209. for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
  210. String key = objectSummary.getKey();
  211. s3.deleteObject(bucketName, key);
  212. }
  213. s3.deleteBucket(bucketName);
  214. System.out.println(bucketName + " has been deleted!");
  215. }
  216. /**
  217. * 删除名为bucketName的bucket里面所有key的前缀和prefix匹配的object
  218. * @param bucketName
  219. * @param prefix
  220. */
  221. private static void deleteObjectsWithPrefix(String bucketName, String prefix) {
  222. if(s3.doesBucketExist(bucketName) == false) {
  223. System.out.println(bucketName + " does not exists!");
  224. return;
  225. }
  226. System.out.println("deleting " + prefix +"* in " + bucketName + " ...");
  227. int pre_len = prefix.length();
  228. ObjectListing objectListing = s3.listObjects(bucketName);
  229. for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
  230. String key = objectSummary.getKey();
  231. int len = key.length();
  232. if(len < pre_len) {
  233. continue;
  234. }
  235. int i;
  236. for(i=0;i<pre_len;i++) {
  237. if(key.charAt(i) != prefix.charAt(i)) {
  238. break;
  239. }
  240. }
  241. if(i < pre_len) {
  242. continue;
  243. }
  244. s3.deleteObject(bucketName, key);
  245. }
  246. System.out.println("All " + prefix + "* deleted!");
  247. }
  248. /**
  249. * 上传一个本地文件(对应位置为path)上传到名为bucketName的bucket
  250. * @param path
  251. * @param bucketName
  252. */
  253. private static void uploadFileToBucket(String path, String bucketName) {
  254. File fileToUpload = new File(path);
  255. if(fileToUpload.exists() == false) {
  256. System.out.println(path + " not exists!");
  257. return;
  258. }
  259. PutObjectRequest request = new PutObjectRequest(bucketName, fileToUpload.getName(), fileToUpload);
  260. Upload upload = tx.upload(request);
  261. while((int)upload.getProgress().getPercentTransferred() < 100) {
  262. try {
  263. Thread.sleep(1000);
  264. } catch (InterruptedException e) {
  265. // TODO Auto-generated catch block
  266. e.printStackTrace();
  267. }
  268. }
  269. System.out.println(path + " upload succeed!");
  270. }
  271. /**
  272. * 在aws上创建一个目录
  273. * @param bucketName
  274. * @param folderName
  275. */
  276. private static void createFolder(String bucketName, String folderName) {
  277. // Create metadata for my folder & set content-length to 0
  278. ObjectMetadata metadata = new ObjectMetadata();
  279. metadata.setContentLength(0);
  280. // Create empty content
  281. InputStream emptyContent = new ByteArrayInputStream(new byte[0]);
  282. // Create a PutObjectRequest passing the foldername suffixed by /
  283. PutObjectRequest putObjectRequest =
  284. new PutObjectRequest(bucketName, folderName+"/",
  285. emptyContent, metadata);
  286. // Send request to S3 to create folder
  287. s3.putObject(putObjectRequest);
  288. }
  289. public static void main(String[] args) throws Exception {
  290. init_with_key();
  291. //uploadFileToBucket("E:\\111\\111\\Ki.mp3","test-us-mp3");
  292. showContentOfAnObject(bucketName,"Kty_Come.mp3.json");
  293. System.exit(0);
  294. }
  295. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/285751
推荐阅读
相关标签
  

闽ICP备14008679号