aliyun服务器使用
一、ESC的使用
1.免费获取服务器(24岁以下都行)
1_1进入页面
进入阿里云网站 https://cn.aliyun.com/,然后搜索学生机进入获取界面。
1_2跟着流程走
1.注意:如果不想做新手训练营可以直接点下一步,最后给个评分就行了。
1_3领取新手福利
2.使用xshell连接服务器
2_1进入云服务管理控制台
2_2创建安全组
创建安全组的主要是为了配置内网入方向,作用是配置外界可访问服务器的端口号(未配置的端口则不允许访问)。
2_3查看服务器的公用地址和私有地址,并修改实例名称和密码
2_4在电脑上下载xshell
2_5尝试使用xshell连接服务器(使用xshell远程操作服务器,比图形界面更快)
1.注意主机是填写公网ip
2.阿里云服务器的默认用户名是root,密码是你写的哪个密码
如果还是连接不上,就重新登入服务器和重启一下xshell。
xshell远程连接服务器的教程
3.配置环境
3_1打开需要打开的端口
3_2在xshell中执行命令,得到一个地址,这个地址就是宝塔管理面板
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
3_3在浏览器中访问宝塔Linux面板,并通过宝塔面板安装Linux的环境
宝塔面板能够监控我们
二、oss阿里云存储服务
1 准备工作:开通oss环境
1.1在阿里云上开通oss功能
1.2创建一个button,在后台操控oss
上传图片并下载测试
2使用java代码操作oss服务器
在公司我们并没有权限进去oss里面进行上传和删除图片的权限,而是通过使用java代码来操作图片。
2.1 创建密钥
2.2准备工作:查看oss官方学习路径
1.点击进入oss学习路径
2.点击查看oss的java模块
3.OSS项目的架构如下:
2.3 第一步导入依赖
明明是1.8版本的jdk,但是只有以下配置才能成功。
<dependencies>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
</dependencies>
2.4 第二步:进行application.properties配置
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=junjun11.oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=LTAI5tP1a4rEqGXpPKm1xwfS
aliyun.oss.file.keysecret=XKLO5M5fehSMCLt1fzsc3Rg2jzVKgF
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=junjun11
2.5第三步:启动类配置
只要添加了阿里云oss,就会在服务器开启的时候自动查找数据库,查找失败就会报错启动失败,所以使用要添加exclude来不加载数据库或者进行连接数据库的配置
//会自动加载数据库,使用要添加这个配置不加载数据库或者添加数据库配置。
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class OssApplication {
public static void main(String[] args) {
SpringApplication.run(OssApplication.class,args);
}
}
2.6创建工具类:读取并保存配置文件中的内容
--------com/junjun/utils/ConstantPropertiesUtils.java
@Component
public class ConstantPropertiesUtils implements InitializingBean {
//@Value能将内容传入到字段中去。而${}能将配置文件中的内容进行传值
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
//定义常量
public static String END_POIND;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
//afterPropertiesSet()会在上面字段传值结束后自动调用
@Override
public void afterPropertiesSet() throws Exception {
END_POIND=endpoint;
ACCESS_KEY_ID=keyId;
ACCESS_KEY_SECRET=keySecret;
BUCKET_NAME=bucketName;
}
}
2.7创建service层
---------com/junjun/service/OssService.java
public interface OssService {
//上传头像到oss
String uploadFileAvatar(MultipartFile file);
}
-------------com/junjun/service/impl/OssServiceImpl.java
package com.junjun.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.junjun.service.OssService;
import com.junjun.utils.ConstantPropertiesUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
@Service
public class OssServiceImpl implements OssService {
@Override//返回url地址!
public String uploadFileAvatar(MultipartFile file) {
//工具类传值。
String endpoint = ConstantPropertiesUtils.END_POIND;//终端,如北京的终端:oss-cn-beijing.aliyuncs.com
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;//自己创建的Bucket的name,如:junjun11
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;//在oss的Access Key Secret功能可以获得
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;//在oss的Access Key Secret功能可以获得
String fileName=file.getOriginalFilename();//需要上传的文件名,如%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81.png
// 创建OSSClient实例。
OSS ossClient = null;
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = null;
try {
ossClient=new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//通过id和密码创建一个可以与OSS交互的OSSClient
inputStream = file.getInputStream();//获取传入文件的输入流
// 依次填写Bucket名称,和Object文件名称或完整路径(例如exampledir/exampleobject.txt)、上传的文件流。Object完整路径中不能包含Bucket名称。
ossClient.putObject(bucketName, fileName, inputStream);
//例如https://junjun11.oss-cn-beijing.aliyuncs.com/%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81.png
String url="https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
} catch (IOException e) {
e.printStackTrace();
}finally {
// 关闭OSSClient。
ossClient.shutdown();
}
return null;
}
}
2.7创建Controller层:调用service
-----------com/junjun/controller/OssController.java
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin//跨域问题
public class OssController {
@Autowired
OssService service;
HashMap<String,Object> map=new HashMap<String,Object>();
@PostMapping("/upload")
//上传头像(传入一个文件),R中保存上传文件的url地址
public R uploadOssFile(MultipartFile file){
String url = service.uploadFileAvatar(file);//成功上传头像并且返回上传后的所在url地址
map.put("url",url);
return R.ok().setData(map);
}
}
2.8测试:上传图片成功!
3问题解决
1.如果上传同一个名称的文件,将会将上一个覆盖:使用uuid来生成随机数
2.文件太杂,我们要实现按日期分文件夹保存的效果。
-------com/junjun/service/impl/OssServiceImpl.java
@Service
public class OssServiceImpl implements OssService {
@Override//返回url地址!
public String uploadFileAvatar(MultipartFile file) {
//工具类传值。
String endpoint = ConstantPropertiesUtils.END_POIND;//终端,如北京的终端:oss-cn-beijing.aliyuncs.com
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;//自己创建的Bucket的name,如:junjun11
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;//在oss的Access Key Secret功能可以获得
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;//在oss的Access Key Secret功能可以获得
String fileName=file.getOriginalFilename();//需要上传的文件名,如%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81.png
//***********************1.生成随机的uuid***********************
String uuid= UUID.randomUUID().toString().replaceAll("-","");//把aw2d-dfgj-432l中间的-去掉
// 创建OSSClient实例。
OSS ossClient = null;
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = null;
try {
ossClient=new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//通过id和密码创建一个可以与OSS交互的OSSClient
inputStream = file.getInputStream();//获取传入文件的输入流
//****************2.把文件按日期进行分类***********************
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy/MM/dd");//确认格式.在oss中所有的xx/都会变成一个文件夹
String date = dateFormat.format(new Date());//得到该格式的当前时间;2021/10/20
//****************3.最终确定filename***********************
String FinalFileName=date+"/"+uuid+fileName;
// 依次填写Bucket名称,和Object文件名称或完整路径(例如exampledir/exampleobject.txt)、上传的文件流。Object完整路径中不能包含Bucket名称。
ossClient.putObject(bucketName, FinalFileName, inputStream);
//例如https://junjun11.oss-cn-beijing.aliyuncs.com/%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81.png
String url="https://"+bucketName+"."+endpoint+"/"+FinalFileName;
return url;
} catch (IOException e) {
e.printStackTrace();
}finally {
// 关闭OSSClient。
ossClient.shutdown();
}
return null;
}
}
【效果展示】: