赞
踩
登录你的AWS 通过账号密码,进入s3 , 并在设置-》安全凭证里面 创建一个密钥 (这个是访问密钥,不是你的登录账号和密码)
创建一个桶,记住你创建的桶名称 因为后面访问的时候需要 桶名称
咱们 上传文件需要 3个参数
访问密钥 和 桶名称
- <dependency>
- <groupId>software.amazon.awssdk</groupId>
- <artifactId>s3</artifactId>
- </dependency>
- <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
- <dependency>
- <groupId>com.amazonaws</groupId>
- <artifactId>aws-java-sdk-s3</artifactId>
- <version>1.12.523</version>
- </dependency>
- package com.gupaoedu;
-
- import java.io.*;
- import com.amazonaws.auth.AWSCredentials;
- import com.amazonaws.auth.BasicAWSCredentials;
- import com.amazonaws.regions.Region;
- import com.amazonaws.regions.Regions;
- import com.amazonaws.services.s3.AmazonS3;
- import com.amazonaws.services.s3.AmazonS3Client;
- import com.amazonaws.services.s3.model.*;
- import com.amazonaws.services.s3.transfer.TransferManager;
- import com.amazonaws.services.s3.transfer.Upload;
- import org.springframework.stereotype.Service;
-
-
- /**
- * @author DELL
- * @Desc S3上传文件客户端
- */
- @Service
- public class TestType {
- //访问密钥 的安全凭证中 找 没有则创建一个
- private static String AWS_ACCESS_KEY = "*****";
- private static String AWS_SECRET_KEY = "*****";
- private static final String BUCKETNAME = "visa-application-system"; //桶名
- private static AmazonS3 s3;
- private static TransferManager tx;
-
-
-
- /**
- * 通过在代码中包含 access key id 和 secret access key 连接 aws
- * @throws Exception
- */
- private static void init_with_key() throws Exception {
- AWSCredentials credentials = null;
- credentials = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
- s3 = new AmazonS3Client(credentials);
- Region usWest2 = Region.getRegion(Regions.AP_NORTHEAST_1); // 你的时区
- s3.setRegion(usWest2);
- tx = new TransferManager(s3);
- }
- /**
- * 上传一个本地文件(对应位置为path)上传到名为bucketName的bucket
- * @param path
- * @param bucketName
- */
- private static boolean uploadFileToBucket(String bucketName,String path) {
- // 通过你传入的文件路径 打开你的本地文件
- File fileToUpload = new File(path);
- if(fileToUpload.exists() == false) {
- System.out.println(path + " not exists!");
- return false;
- }
- // 桶名、 存入桶里面的文件名字(自定义)(如果时多级目录 传入全路径)、 通过你传入的文件路径打开的文件
- PutObjectRequest request = new PutObjectRequest(bucketName,fileToUpload.getName(),fileToUpload);
- Upload upload = tx.upload(request);
- while((int)upload.getProgress().getPercentTransferred() < 100) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- return false;
- }
- }
- System.out.println(path + " upload succeed!");
- return true;
- }
-
- // 传入要拉去的文件名
- private static Boolean downloadrelease(String bucketname,String filename,String windowspath) throws IOException {
- // 下载文件 ( 桶名,文件夹名+文件名 ) 因为这是直接在桶下面 所以 只有文件名
- // 如果你是多级目录 需要 传入你的文件夹加你的文件名 例如: test/file。pdf
- S3Object s3Object = s3.getObject(new GetObjectRequest(bucketname, filename));
- if (s3Object != null) {
- InputStream inputStream = null;
- FileOutputStream fileOutputStream = null;
- byte[] data = null;
- try {
- // 通过你 要下载桶中文件名称( 可以传多级目录 但需要 截取要下载到本地的文件名 之后和你要下载的本地路径相拼接)
- File file = new File(windowspath+"\\"+filename);
-
- if (!file.exists()) {
- file.createNewFile();
- }
- //获取S3object对象文本信息
- inputStream = s3Object.getObjectContent();
- data = new byte[inputStream.available()];
- int len = 0;
- fileOutputStream = new FileOutputStream(file.getPath());
-
- while ((len = inputStream.read(data)) != -1) {
- fileOutputStream.write(data, 0, len);
- }
- System.out.println(("*********下载文件成功!*********"));
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (fileOutputStream != null) {
- try {
- fileOutputStream.close();//文件流关闭
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (inputStream != null) {
- try {
- inputStream.close();//文件流关闭
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- }
- }
- return true;
- }
-
- public static void main(String[] args) throws Exception {
- // 根据你的 访问密匙 初始化S3 对象
- init_with_key();
-
- //传入 你要上传 到的桶名称, 和你上传的本地文件全路径
- boolean b = uploadFileToBucket(BUCKETNAME, "C:\\Users\\Administrator\\Desktop\\代码\\file2023-08-28.pdf");
- if(b){
- System.out.println("上传成功");
- }else {
- System.out.println("上传失败");
- }
-
- /*
- *
- * 下载文件 这里我只传入了三个参数
- * 1,桶名称
- * 2. 桶中的文件名称 或多级文件目录 文件名称例如 files/pdfs/file.pdf
- * 3. 下载到本地路径
- * */
- Boolean downloadrelease = downloadrelease(BUCKETNAME, "file2023-08-28.pdf", "C:\\Users\\Administrator\\Desktop\\代码");
- if(downloadrelease){
- System.out.println("下载成功");
- }else {
- System.out.println("下载失败");
- }
-
- System.exit(0);
- }
-
-
- }

- /**
- * 用于创建一个名为bucketName的s3 bucket
- * @param bucketName
- */
- private void createBucket(String bucketName) {
- if(s3.doesBucketExist(bucketName) == true) {
- System.out.println(bucketName + " already exist!");
- return;
- }
- System.out.println("creating " + bucketName + " ...");
- s3.createBucket(bucketName);
- System.out.println(bucketName + " has been created!");
- }
-
- /**
- * 列出名为bucketName的bucket里面的所有object
- * @param bucketName
- */
- private void listObjects(String bucketName) {
- System.out.println("Listing objects of " + bucketName);
- ObjectListing objectListing = s3.listObjects(bucketName);
- int objectNum = 0;
- for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
- System.out.println(" - " + objectSummary.getKey());
- objectNum ++;
- }
- System.out.println("total " + objectNum + " object(s).");
- }
-
- /**
- * 判断名为bucketName的bucket里面是否有一个名为key的object
- * @param bucketName
- * @param key
- * @return
- */
- private boolean isObjectExit(String bucketName, String key) {
- int len = key.length();
- ObjectListing objectListing = s3.listObjects(bucketName);
- String s = new String();
- for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
- s = objectSummary.getKey();
- int slen = s.length();
- if(len == slen) {
- int i;
- for(i=0;i<len;i++) {
- if(s.charAt(i) != key.charAt(i)) {
- break;
- }
- }
- if(i == len) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * 在本地创建一个名为filename的文件,输入一些信息后,将其传到名为bucketName的s3 bucket里面去
- * @param bucketName
- * @param filename
- * @throws IOException
- */
- private void createSampleFile(String bucketName, String filename) throws IOException {
- if(isObjectExit(bucketName, filename) == true) {
- System.out.println(filename +" already exists in " + bucketName + "!");
- return;
- }
- System.out.println("creating file " + filename);
- File file = new File(filename);
- file.deleteOnExit();
-
- Writer writer = new OutputStreamWriter(new FileOutputStream(file));
- writer.write("abcdefghijklmnopqrstuvwxyz\n");
- writer.write("01234567890112345678901234\n");
- writer.write("!@#$%^&*()-=[]{};':',.<>/?\n");
- writer.write("01234567890112345678901234\n");
- writer.write("abcdefghijklmnopqrstuvwxyz\n");
- writer.close();
-
- s3.putObject(bucketName, filename, file);
- System.out.println("create sample file " + filename + " succeed!");
- }
-
- /**
- * 输出"s3://"+bucketname+"/"key对应的object对应的信息
- * @param bucketName
- * @param key
- */
- private static String showContentOfAnObject(String bucketName, String key) {
-
- S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
- InputStream input = object.getObjectContent();
- return object.getKey();
- // BufferedReader reader = new BufferedReader(new InputStreamReader(input));
- // try {
- // while (true) {
- // String line = reader.readLine();
- // if (line == null) {
- // break;
- // }
- // System.out.println(" " + line);
- // }
- // System.out.println();
- // } catch (IOException e) {
- // e.printStackTrace();
- // }
- }
-
- /**
- * 输出"s3://"+bucketname+"/"key对应的object对应的信息(这个object对应的文件时gzip格式的)
- * @param bucketName
- * @param key
- */
- private void showContentOfAnGzipObject(String bucketName, String key) {
- try {
- S3Object object = s3.getObject(new GetObjectRequest(bucketName, key));
- InputStream input = new GZIPInputStream(object.getObjectContent());
- BufferedReader reader = new BufferedReader(new InputStreamReader(input));
-
- while (true) {
- String line = reader.readLine();
- if (line == null) {
- break;
- }
- System.out.println(" " + line);
- }
- System.out.println();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- /**
- * 删除一个名为bucketName的bucket
- * @param bucketName
- */
- private void deleteBucket(String bucketName) {
- if(s3.doesBucketExist(bucketName) == false) {
- System.out.println(bucketName + " does not exists!");
- return;
- }
- System.out.println("deleting " + bucketName + " ...");
- ObjectListing objectListing = s3.listObjects(bucketName);
- for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
- String key = objectSummary.getKey();
- s3.deleteObject(bucketName, key);
- }
- s3.deleteBucket(bucketName);
- System.out.println(bucketName + " has been deleted!");
- }
-
- /**
- * 删除名为bucketName的bucket里面所有key的前缀和prefix匹配的object
- * @param bucketName
- * @param prefix
- */
- private void deleteObjectsWithPrefix(String bucketName, String prefix) {
- if(s3.doesBucketExist(bucketName) == false) {
- System.out.println(bucketName + " does not exists!");
- return;
- }
- System.out.println("deleting " + prefix +"* in " + bucketName + " ...");
- int pre_len = prefix.length();
- ObjectListing objectListing = s3.listObjects(bucketName);
- for(S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
- String key = objectSummary.getKey();
- int len = key.length();
- if(len < pre_len) {
- continue;
- }
- int i;
- for(i=0;i<pre_len;i++) {
- if(key.charAt(i) != prefix.charAt(i)) {
- break;
- }
- }
- if(i < pre_len) {
- continue;
- }
- s3.deleteObject(bucketName, key);
- }
- System.out.println("All " + prefix + "* deleted!");
- }
-
-
- /**
- * 列出我的s3上所有的bucket的名字
- */
- private void listBuckets() {
- System.out.println("Listing buckets");
- int bucketNum = 0;
- for(Bucket bucket : s3.listBuckets()) {
- System.out.println(" - " + bucket.getName());
- bucketNum ++;
- }
- System.out.println("total " + bucketNum + " bucket(s).");
- }
-
-
- /**
- * 在aws上创建一个目录
- * @param bucketName
- * @param folderId
- */
- private static String createFolder(String bucketName, Integer folderId) {
- // Create metadata for my folder & set content-length to 0
- ObjectMetadata metadata = new ObjectMetadata();
- metadata.setContentLength(0);
- // Create empty content
- InputStream emptyContent = new ByteArrayInputStream(new byte[0]);
- // Create a PutObjectRequest passing the foldername suffixed by /
- String folderName=FOLDERNameLIST+folderId+"/"; // 创建文件目录
- PutObjectRequest putObjectRequest =
- new PutObjectRequest(bucketName, folderName,
- emptyContent, metadata);
- // Send request to S3 to create folder
- s3.putObject(putObjectRequest);
- return folderName;
- }

npm install aws-sdk
- // 在<script> 标签中 导入 前提是 你把aws install 在你的项目中
- import AWS from 'aws-sdk';
- // 在vue method 代码块中 定义 单机按钮 调用方法
-
- downloadImage(filename) {
- // 配置AWS SDK
- AWS.config.update({
- // 你的访问密钥
- accessKeyId: '******',
- secretAccessKey: '*****',
- region: 'ap-northeast-1' // 你的时区
- });
-
- const s3 = new AWS.S3();
- // 桶名
- const bucketName = '***';
- //文件名 或者文件全路径名 桶名/ [文件夹名/] *.*
- const key = '***/*.*';
-
- // 创建下载链接
- const params = {
- Bucket: bucketName,
- Key: key
- };
-
- s3.getSignedUrl('getObject', params, (err, url) => {
- if (err) {
- console.error('无法生成签名URL:', err);
- } else {
- // 使用生成的URL下载图片
- window.open(url);
- }
- });
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。