一.阿里云oss(图片存储)--fastdfs (视频存储)

二.java-通知-阿里云短信服务

三.springboot-邮件发送

技术点总结:  注入OSSClient和配置类,文件格式的判断------通过入参获取到图片的文件名称,------ 在通过图片文件名称获取到自定义新的文件图片的名称----调用putObject()传入文件名称--------------返回值拼接出图片文件的路径..

图片技术:阿里云oss适合

视频:fastdfs  适合

一.图片的存储问题

 

实践操作(重点)

 

 

 

service 层代码实现

 

 

追加上传---断点续传----分片上传(下面的阿里官网文档有代码)

分片上传功能介绍(Java)_对象存储 OSS-阿里云帮助中心

二.视频技术(代码参考)

参考:小视频方案

探花交友总结_谁来剪月光i的博客-CSDN博客_探花交友

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协议的接收邮件服务器,用来接收电子邮件的。

发送邮件的原理

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐