阿里云技术
一.阿里云oss(图片存储)--fastdfs (视频存储)
二.java-通知-阿里云短信服务
三.springboot-邮件发送
技术点总结: 注入OSSClient和配置类,文件格式的判断------通过入参获取到图片的文件名称,------ 在通过图片文件名称获取到自定义新的文件图片的名称----调用putObject()传入文件名称--------------返回值拼接出图片文件的路径..
图片技术:阿里云oss适合
视频:fastdfs 适合
一.图片的存储问题
实践操作(重点)
service 层代码实现
追加上传---断点续传----分片上传(下面的阿里官网文档有代码)
分片上传功能介绍(Java)_对象存储 OSS-阿里云帮助中心
二.视频技术(代码参考)
参考:小视频方案
SpringBoot整合FastDFS_不会代码的蛋蛋的博客-CSDN博客
上传文件的流程就是通过nginx进行http访问,nginx找到trackerServer,给了trackerServer一个文件,trackerServer拿到这个文件之后,根据自己的规则存储到指定的storageServer的相应路径下。
同时,trackerServer会生成文件在服务器上的存储路径,通过nginx返回给客户端,客户端拿到这个路径,在前面加上服务器地址就可以访问这个文件了。
二.1 FastDFS是个服务器(docker 比较快, 自己搭建本机) (代码实现,百度的更全面)
上传视频可能遇到的问题:
二.java-通知-阿里云短信服务
1.前置工作
申请签名:签名是短信中能代表发送者属性的字段,一般为公司名称。目前个人用户是无法申请的,只有企业账号才可申请。
申请模板:模板就是固定内容+动态验证码。例如,尊敬的 ${name},您的快递已飞奔在路上,将今天 ${time} 送达您的手里,请留意查收。
发送短信:在模板,签名都申请下来后就可以通过代码发送短信了
用户权限: ak,sk
2.参数, ak,sk,regionid,phone(目标手机号),SignName(签名名称),TemplateCode(短信模板),TemplateParam(变量替换)
3.6.1.1、申请签名与模板
说明:申请签名时,个人用户只能申请一个并且签名的名称必须为“ABC商城”,否则审核不通过。
申请模板:
3.6.1.2、设置用户权限
在阿里云中,需要在RAM服务中创建用户以及权限,才能通过api进行访问接口。
创建用户:
创建完成后要保存AccessKey Secret和AccessKey ID,AccessKey Secret只显示这一次,后面将不再显示。
添加权限:
阿里云官网调用链接
文档:SendSms - 发送短信 - 短信服务 - 阿里云:
3.6.1.3、示例代码
/*pom.xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
*/
public class SendSms {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",
"LTAI4G7d2Q9CHc741gighjTF", "uKOOGdIKvmoGhHlej8cJY8H3nlU6Fj");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", "158****7944"); //目标手机号
request.putQueryParameter("SignName", "ABC商城"); //签名名称
request.putQueryParameter("TemplateCode", "SMS_204756062"); //短信模板code
request.putQueryParameter("TemplateParam", "{\"code\":\"123456\"}");//模板中变量替换
try {
CommonResponse response = client.getCommonResponse(request);
//{"Message":"OK","RequestId":"EC2D4C9A-0EAC-4213-BE45-CE6176E1DF23","BizId":"110903802851113360^0","Code":"OK"}
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
3.6.1.4、实现发送短信方法
配置文件:aliyun.properties
aliyun.sms.regionId = cn-hangzhou aliyun.sms.accessKeyId = LTAI4G7d2Q9CHc741gighjTF aliyun.sms.accessKeySecret = uKOOGdIKvmoGhHlej8cJY8H3nlU6Fj aliyun.sms.domain= dysmsapi.aliyuncs.com aliyun.sms.signName= ABC商城 aliyun.sms.templateCode= SMS_204756062
需要注意中文编码问题:
读取配置:
package com.tanhua.sso.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @PropertySource("classpath:aliyun.properties") @ConfigurationProperties(prefix = "aliyun.sms") @Data public class AliyunSMSConfig { private String regionId; private String accessKeyId; private String accessKeySecret; private String domain; private String signName; private String templateCode; }
代码实现:
//SmsService.java /** * 发送短信验证码 * * @param mobile * @return */ public String sendSms(String mobile) { DefaultProfile profile = DefaultProfile.getProfile(this.aliyunSMSConfig.getRegionId(), this.aliyunSMSConfig.getAccessKeyId(), this.aliyunSMSConfig.getAccessKeySecret()); IAcsClient client = new DefaultAcsClient(profile); String code = RandomUtils.nextInt(100000, 999999) + ""; CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain(this.aliyunSMSConfig.getDomain()); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", this.aliyunSMSConfig.getRegionId()); request.putQueryParameter("PhoneNumbers", mobile); //目标手机号 request.putQueryParameter("SignName", this.aliyunSMSConfig.getSignName()); //签名名称 request.putQueryParameter("TemplateCode", this.aliyunSMSConfig.getTemplateCode()); //短信模板code request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");//模板中变量替换 try { CommonResponse response = client.getCommonResponse(request); String data = response.getData(); if (StringUtils.contains(data, "\"Message\":\"OK\"")) { return code; } log.info("发送短信验证码失败~ data = " + data); } catch (Exception e) { log.error("发送短信验证码失败~ mobile = " + mobile, e); } return null; }
三.springboot-邮件发送
代码参考如下链接:参考链接:Java-SpringBoot发送邮件代码_Coder-CT的博客-CSDN博客
参考大佬总结:
https://fantianzuo.blog.csdn.net/article/details/102689621
1.正常的邮件发送or别名的邮件发送
1.普通邮件,html邮件(模板邮件), 带附件的邮件
2.SMTP协议:简单邮件传输协议,SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,避免受到垃圾邮件的侵扰 .重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。 SMTP是个请求/响应协议,它监听25号端口,用于接收用户的邮件请求,并与远端邮件服务器建立SMTP连接。(常用的邮件协议)
3.POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而SMTP服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
发送邮件的原理
更多推荐
所有评论(0)