发表于: 2021-10-13 23:33:53
1 1005
一,今天完成的事情
任务七
1, 我的短信注册模块,如果是+86,需要在注册的时候自己写+86,否则无法成功。因为用的短信发送需要指定国际代码。我没有使用能选择国家地区号的前端页面,所以测试的时候麻烦填写+86的号码,不是+86号码的功能我也没有开通。
集成之前当然是先纯粹的先测试需要用的Util是否能使用,才加上controller。
我的短信注册的controller和email注册差不多。只是财迷为了省钱,每10小时最多发5条短信,如果用完5条,这次要等至少10小时。
最终成功进入数据库。
注册成功
马上用username和手机号码登录。成功
2,不论是什么模块,都要参考官方自己的文档。越开始,越从单一开始。最后才加到整个项目中。
OSS的上传文件文档可以一读,
https://help.aliyun.com/document_detail/31885.htm?spm=a2c4g.11186623.0.0.44d82cb7iYblVq#task-u3p-3n4-tdb
但是主要还是,从OSS的Java SDK的快速入门开始
https://help.aliyun.com/document_detail/32011.html
我最终选看文档,是没看OSS Java SDK所有文档。
3,提醒:需要增加 OSS 权限:访问控制 -> 用户 -> 权限管理 -> 添加权限
https://ram.console.aliyun.com/users/nicole
开发阶段,我直接给自己AliyunOSSFullAccess
4,上传图片后,能够自动更新图片地址到数据库中。所以首先要有相应的dao层,负责更新url。为了更新成功,需要系统3个可以使用的用户名之一。前端给我的逻辑是用户会填上自己的username,所以我就按照前端的逻辑做了。
<update id="uploadImageurl" parameterType="com.nicole.registerupload.entity.User">
update user set imageurl=#{imageurl,jdbcType=VARCHAR}
where username = #{username,jdbcType=VARCHAR}
</update>
5,我想到的上传的关键。
1)单纯测试上传成功。OSS一般只参考简单上传即可。
2)搞清楚我用的前端页面,
<form action="${path}/u/upload/image" method="post" enctype="multipart/form-data">
返回的文件类型,看是不是需要做进一步处理,能够成功上传。
需要配置SpringMVC的CommonsMultipartFile文件解析器
<!-- 支持上传文件前端 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
spring-mvc.xml加入
<!--配置文件上传解析器 其中id的值必须是commonsMultipartResolver 只是个固定写法,其他的不行-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--限制上传文件的最大字节数,1024个字节为1kB,即上传的文件不能大于5M-->
<property name="maxUploadSize" value="5242880"/>
<!--设置请求的编码格式为UTF-8,默认为iso-8859-1-->
<property name="defaultEncoding" value="UTF-8"/>
</bean>
也是配置aliOSS.properties,用
@Value("${aliAccessKeyId}")
private String aliAccessKeyId;
配置变量。
类名上注意需要加注解
@Component
@PropertySource("classpath:aliOSS.properties")
public class OSSUtil {
参考OSS官方,测试成功上传代码,查看结果。总结结果后,写出OSS关于上传的util。
//上传文件流
//以下代码用于将文件流上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。
private void uploadFileStream() throws FileNotFoundException {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,
// Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourendpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。
// 强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "youraccesskeyid";
String accessKeySecret = "youraccesskeysecret";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = new FileInputStream("C:\\upload\\puppy.jpg");
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
ossClient.putObject("nicoleimage", "filestream/puppyStream.jpg", inputStream);
// 关闭OSSClient。ossClient.shutdown();
}
上传成功,传回来的图片Url显示也正常,我的逻辑是传回路径,成功显示在了结果页面。
上传成功。包括查看OSS相关bucket。采用了随机数字文件命名。
填写的是用户名nicole,添加文件url成功
3)这个功能主要是为了让客户上传自己的头像,所以一定需要能返回上传文件的地址的存储端。
https://help.aliyun.com/document_detail/39607.htm?spm=a2c4g.11186623.0.0.496540c2pKuMwh#concept-39607-zh
https://help.aliyun.com/document_detail/32016.htm?spm=a2c4g.11186623.0.0.1fda2f41lF5bNN#concept-32016-zh
顺藤摸瓜
4)如果需要把图片文件设置成不是下载,是浏览,可能还需要做其它处理。这个行为可能叫预览行为。
现在不要求展示用户页面,所以不展示头像。任务七这个可以忽略。
二,今天问题
应该是不同逻辑中,不要使用相同的key。如果key相同,一般都是string,会发生各种意想不到的问题。本来各种存储系统就是讲究Key唯一。
三,今天的收获
代码不一定难,某样工具可能就是不那么会用。
短信验证码,上传补充。
四,明天的计划
任务七
评论