目录
前言
在使用Java制作项目的过程中想实现文件上传功能,使用传统的上传文件存储到本地磁盘会存在许多弊端,并且极其不方便等问题,以及在学习JavaWeb的过程中都会使用到文件上传存储功能。为此我们可以通过使用:阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据 存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频 等在内的各种非结构化数据文件。在此,此文档为了照顾刚学习的新手党同学,以下是从注册账号到实现一个简单上传的完整过程。
一、阿里云OSS简介
阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据 存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频 等在内的各种非结构化数据文件。 阿里云OSS将数据文件以对象(object)的形式上传到存储空间(bucket)中。
您可以进行以下操作:
1、创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。
2、通过获取已上传文件的地址进行文件的分享和下载。
3、通过修改存储空间或文件的属性或元信息来设置相应的访问权限。
4、在阿里云管理控制台执行基本和高级OSS任务。
5、使用阿里云开发工具包或直接在应用程序中进行RESTful API调用执行基本和高级 OSS任务
二、注册阿里云账号
1.注册阿里云账号(以有阿里云账号可忽略此步骤!)
打开阿里云官网:https://www.aliyun.com/
三、前期准备工作
1.阿里云实名验证
注意:完成阿里云实名验证(此步骤必做!不然无法开通OSS服务!)
1、登录阿里云账号后点击控制台:
2、点击头像--->点击实名验证---->选择个人验证------>支付宝登录授权即可完成实名验证!
2、开通OSS服务
点击立即开通即可!
注意:开通OSS是免费的,需要先实名验证才可支付,并且支付是0元!
3.创建Bucket存储空间
开通服务后,在OSS产品详情页面单击管理控制台直接进入OSS管理控制台界面。您也 可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单 击左侧的对象存储OSS菜单进入OSS管理控制台界面。OSS管理控制台 (aliyun.com)
注意:这里选择地域可以根据自己喜好选择,也可根据我的。如果选择其他地域的同学!记得在文件上传的Java类中修改地域名!(下面会进行讲解!)
4、获取AccessKey ID 和 AccessKey Secret
控制台----->进入OSS对象存储服务---->点击头像---->点击AccessKey管理----->创建密钥
注意!!!:在验证身份后会自动跳出创建好的Access Key!一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!! 重要的事情说三遍!!!
第一遍!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!
第二遍!!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!
第三遍!!!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!
5、OSS快速入门--->(安装SDK)
1、查看项目使用的Java版本
注意:
1.1、必须是使用Java 1.7.0及以上版本。
1.2、如果使用的是Java 9及以上的版本,需要添加的代码如下:
(1)使用1.8版本的同学引入此代码即可!无需再次引入片段(2)代码!
//创建测试工程,引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
(2)则需要添加JAXB相关依赖。添加JAXB相关依赖示例代码如下:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
查看项目使用的Java版本:
您可以通过命令java -version查看Java版本。或者在你的pom.xml文件中查看你项目使用的Java版本。例如:
2、从官网获取相关SDK依赖
相关依赖代码以在上方:也可根据步骤自行复制官网依赖代码!
四、项目配置
1、配置SDK Maven依赖
2、新建上传文件所需的类和main方法
首先在阿里云找到上传文件流(注意:这里使用的是IO流的方式进行上传):详细步骤参照:OSS快速入门--->(安装SDK)
上传文件流Java代码:
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
String filePath= "D:\\localpath\\examplefile.txt";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
InputStream inputStream = new FileInputStream(filePath);
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
其次,在项目的测试类中添加一个测试类进行测试!步骤如下:
3、修改上传文件流Java代码
注意:很多同学因为第三步骤导致上传成功后阿里云没有显示上传的文件!!!
完成以上步骤后进行修改刚粘贴进来的代码!!!接下来回到阿里云的Bucket列表步骤如图所示!
并且复制刚刚创建好的Bucket名称!!!找不到此页面的同学:(详细操作步骤参考:创建Bucket存储空间)
4、获取地域方法
(此步骤真对于在创建Bucket选择其他地域的同学例如:华东2、华东3...等)
下图是修改粘贴进来的上传文件流Java代码步骤详情:(由于我使用的地域是华东2,所以需要通过上面步骤进行查询获取对应的地域节点进行修改。地域选择华东一的同学无需操作!下图为需改后的完整代码)
package com.itheima;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.junit.jupiter.api.Test;
import java.io.FileInputStream;
import java.io.InputStream;
public class Demo {
@Test
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "java-web-springboot01";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "1.jpg";
// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
String filePath= "D:\\Study_Project\\Springboot_project\\test\\1.jpg";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
InputStream inputStream = new FileInputStream(filePath);
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
5、配置AccessKey ID 和 AccessKey Secret 环境变量(使用旧方法无需配置环境变量可忽略此步骤)
右键此电脑--->属性---->高级系统设置--->环境变量---->
注意:如果还没有创建AccesKey密钥的同学请参考:前期准备工作中的第四步骤!
环境变量名:OSS_ACCESS_KEY_ID
变量值:AccessKey ID
环境变量名:OSS_ACCESS_KEY_SECRET
变量值: AccessKey Secret
五、运行项目测试实现文件上传
1、检查代码无误后根据以下步骤进行操作即可:
2、回到阿里云中对象存储 OSS--->Bucket列表---->选择刚刚创建的Bucket(以在Java代码中修改的Bucket名为准!)----->文件管理----->文件列表。通过以上步骤即可查看上传的指定文件!
总结
此文档主要为新手档准备,所以没有过多的文字解释。并且全程主要是以图片的教程方式,通俗易懂,简单明了,一学就会!上手必成!上则3岁能懂,下则90高龄可写!该文档主要通过使用OSS对象存储服务实现简单上传文件。希望此教程能给各位刚迈入编程大门的同学们有所帮助!当然此教程可能有写错的地方,但全程都通过自己一步一步从测试到完成文件上传都没有问题才进行上传。如有错误的地方请留言,我也会细心修改出错的地方。如果此教程对你有帮助不妨点个关注不迷路。