当前位置: 首页 > news >正文

大气网站图郑州网络营销推广机构

大气网站图,郑州网络营销推广机构,餐饮店设计哪家好,北京小程序公司1.概要 前一章节完成了用户信息的注册、登录、详细信息查询,以及线程池与拦截器技术。 这一章完善了用户信息更新/更改功能,包括昵称、邮箱、头像、密码等... 而后接触到了本地上传和云上传,其二者区别: 选择本地上传还是云上…

1.概要

前一章节完成了用户信息的注册、登录、详细信息查询,以及线程池与拦截器技术。

这一章完善了用户信息更新/更改功能,包括昵称、邮箱、头像、密码等...

而后接触到了本地上传和云上传,其二者区别:

选择本地上传还是云上传取决于具体的业务需求、预算、数据量、以及对速度和可靠性的要求。对于需要高可靠性和可扩展性的大规模数据存储,云上传通常是更好的选择。而对于小型项目或对成本敏感的场景,本地上传可能更加合适。

借助阿里云的OSS对象存储服务,更方便的使网站,去进行静态内容托管、备份和归档。

2.更新用户信息

2.1 映射类UserMapper

文件地址:org/example/mapper/UserMapper.java

now():获得数据库的系统时间

package org.example.mapper;
import ...
@Mapper
public interface UserMapper {......//更新用户表,设计昵称邮箱等数值@Update("update user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id=#{id}")void update(User user);//更新用户头像@Update("update user set user_pic=#{avatarUrl},update_time=now() where id=#{id}")//创建updateAvatar接口,Integer规范数据为整型void updateAvatar(String avatarUrl,Integer id);//更新用户密码@Update("update user set password=#{rePassword},update_time=now() where id=#{id}")void updatePassword(String rePassword,Integer id);
}

2.2 业务层UserService

2.2.1 创建接口

文件地址:org/example/service/UserService.java

//更新用户信息
void update(User user);
//更新用户头像
void updateAvatar(String avatarUrl);
//更新用户密码
void updatePassword(String rePassword);

2.2.2 实现接口

文件地址:org/example/service/impl/UserServiceImpl.java

package org.example.service.impl;
import ...
@Service
public class UserServiceImpl implements UserService {............//实现用户信息更新@Overridepublic void update(User user) {//设置用户更新时间为当前系统时间//LocalDateTime.now()获得系统时间user.setUpdateTime(LocalDateTime.now());userMapper.update(user);}//实现用户头像更新@Overridepublic void updateAvatar(String avatarUrl) {//由于请求后,线程池中将会存放该用户的信息,包含ID值Map<String,Object> map = ThreadLocalUtil.get();Integer id = (Integer) map.get("id");userMapper.updateAvatar(avatarUrl, id);}//实现用户密码更新@Overridepublic void updatePassword(String rePassword) {Map<String,Object> map = ThreadLocalUtil.get();Integer id = (Integer) map.get("id");String md5String = Md5Util.getMD5String(rePassword);userMapper.updatePassword(md5String, id);}
}

2.3 控制层UserController

文件地址:org/example/controller/UserController.java

@RequestBody:将前端传来的数据自动转换成JSON格式的字符串,并且为对象User赋值

@Validate:开启参数校验

    //更新用户信息@PutMapping("/update")public Result update(@RequestBody @Validated User user){//调用业务层的更新用户方法userService.update(user);return Result.success();}@PutMapping("/updateavatar")//更新用户头像信息public Result updateAvatar(@RequestParam String avatarUrl){userService.updateAvatar(avatarUrl);return Result.success();}//更新用户密码信息@PostMapping("/updatePwd")public Result updatePwd(@RequestBody Map<String,String> params){// 获得前端传来的旧密码,新密码,确认密码// 校验数据String oldPwd = params.get("old_Pwd");String newPwd = params.get("new_Pwd");String rePwd = params.get("re_Pwd");// 各密码不能为null// StringUtils.hasLength(oldPwd)判断字符中的个数,返回Boolean,// 如果变量中没有值则返回falseif (!StringUtils.hasLength(oldPwd)||!StringUtils.hasLength(newPwd)||!StringUtils.hasLength(rePwd)){return Result.error("缺少必要の参数");}//验证原密码是否正确Map<String,Object> map = ThreadLocalUtil.get();String username = (String)map.get("username");User user = userService.findUserByUsername(username);//判断输入的旧密码,与数据库的密码是否一致if (!user.getPassword().equals(Md5Util.getMD5String(oldPwd))){return Result.error("旧密码输入错误");}//判断新密码和确认密码是否一致if (!rePwd.equals(newPwd)){return Result.error("新密码和确认密码不一致");}//更新数据中的密码userService.updatePassword(newPwd);return Result.success();}

2.4 校检数据格式

@JsonIgnore:配置springmvc把当前对象转换成json字符串的时候忽略password

@Email:校验数据为邮箱格式

@NotEmpty:校验不能为空

@Pattern(regexp = "^\\S{1,10}$"):校验内容为字符型,且在1-10位之间

package org.example.entity;
import ...
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private Integer id;private String username;@JsonIgnoreprivate String password;@NotEmpty@Emailprivate String email;@NotEmpty@Pattern(regexp = "^\\S{1,10}$")private String nickname;private String userPic;private LocalDateTime createTime;private LocalDateTime updateTime;
}

2.5 实验效果

2.5.1 更新用户信息

2.5.2 更新用户头像

2.5.3 更改用户密码

3.文件上传&本地储存FileUploadController

文件地址:org/example/controller/FileUploadController.java

使用 @PostMapping 注解来映射 POST 请求到 /upload 路径。

这个方法接收一个 MultipartFile 类型的参数 file,用于处理上传的文件。

MultipartFile:用于传输二进制文件,如图片、视频等

originalFilename.lastIndexOf("."):获取上传文件的扩展名,如jpg、png

UUID.randomUUID().toString():随机获得一个唯一id值作为名字

package org.example.controller;
import org.example.entity.Result;
import org.example.utils.AliOssUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
public class FileUploadController {@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws IOException {//把文件内容存储到本地磁盘上String originalFilename = file.getOriginalFilename();System.out.println(originalFilename);//保证文件名唯一性String filename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));//向目标传递图片的二进制值file.transferTo(new File("D:\\workspace\\images\\"+filename));return Result.success("url访问地址");}
}

4.文件上传&阿里云OSS

步骤:

注册登录-开通对象储存服务-创建bucket-获取AccessKey-参照SDK编写程序-集成OSS

Bucket:是一种用于存储数据的基本容器

AccessKey:用于身份验证和访问控制的一种机制

SDK(Software Development Kit,软件开发工具包):是一套工具、库、文档和代码样本的集合,用于帮助开发者为特定的软件包、软件框架、硬件平台、操作系统等创建应用程序或库。

4.1 注册登录

4.2 开通对象储存服务

释放数据激情,云存储新纪元!极速、安全、经济,一切尽在掌控!

立即加入,快来领取吧!让数据飞起来!

4.3 创建bucket

开通过后,回到主页,拉至最下方。有权益中心-免费试用按键。

进入免费试用后,可查看我的试用

费用与成本中进入管理关联实例,抵达OSS管理控制台。

其中可查看与创建自己的"bucket"

自定义创建-填写bucket名称-其余默认(所属资源组:空)-完成创建

设置bucket使用权限:

1.进入bucket    2.权限控制-阻止公共访问:关闭    3.权限控制-读写权限:公共读写

4.4 获取AccessKey 

在此地可创建属于自己的密钥

4.5 参照SDK编写程序pom.xml

安装SDK:在MAVEN项目pom.xml中加入SDK依赖

<!--阿里云OSS服务-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version>
</dependency>
<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>

4.6 测试OSS-uploadTest

文件地址:src/test/java/uploadTest.java

执行文件测试文件后,可在阿里云bucket列表中,

访问到个人电脑中D:\\workspace\\images\\1.jpg(为例)地址上的图片。

云上的图片名为:"wagaga.jpg"(String objectName的值)。

点击wagaga.jpg处可复制到图片的下载地址,在浏览器中打开可直接下载到本地。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
public class uploadTest {//测试上传文件至阿里云的OSSpublic static void main(String[] args) throws Exception {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。// EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称,例如examplebucket。String bucketName = "new-system-622";// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "wagaga.jpg";// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。String region = "cn-beijing";//填写AccesskeyString ACCESS_KEY_ID="LTAI5t798Q7kyDGjn3emtKUy";String ACCESS_KEY_SECRET="Pn4LIt2AQw04jIvorcdF62dJSVqO67";// 创建OSSClient实例。ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);OSS ossClient = new OSSClientBuilder().build(endpoint,ACCESS_KEY_ID,ACCESS_KEY_SECRET);try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new FileInputStream("D:\\workspace\\images\\1.jpg"));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传字符串。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();}}}
}

4.7 联系自身代码集成OSS-AliOssUtils

新建文件:org/example/utils/AliOssUtils.java

private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com":

  • private 私有的
  • static 静态的,只加载一次
  • final 不允许被修改
  • String 声明数据类型
  • ENDPOINT 常量名,通常大写
package org.example.utils;
import com.aliyun.oss.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;
public class AliOssUtils {//常量是在程序中固定不会变的数据private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";private static final String ACCESS_KEY_ID="LTAI5t798Q7kyDGjn3emtKUy";private static final String ACCESS_KEY_SECRET="Pn4LIt2AQw04jIvorcdF62dJSVqO67";private static final String BUCKET_NAME = "new-system-622";private static final String REGION = "cn-beijing";public static String uploadFile(String objectName, InputStream in){// 创建OSSClient实例。ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);String url = ""; //创建变量作用域在try体外try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);// 上传字符串。PutObjectResult result = ossClient.putObject(putObjectRequest);//获得上传文件的地址url = "http://"+BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;} 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();}}return url;}
}

4.8 返回FileUploadController

文件地址:org/example/controller/FileUploadController.java

更改当初自定义的固态图片地址,换成云上的链接:

package org.example.controller;
import org.example.entity.Result;
import org.example.utils.AliOssUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
public class FileUploadController {@PostMapping("/upload")public Result<String> upload(MultipartFile file) throws IOException {String originalFilename = file.getOriginalFilename();System.out.println(originalFilename);String filename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));//向目标传递图片的二进制值👇// file.transferTo(new File("D:\\workspace\\images\\"+filename));👆String url = AliOssUtils.uploadFile(filename, file.getInputStream());👇return Result.success(url);👆}
}

http://www.hkea.cn/news/440193/

相关文章:

  • wordpress文章批量编辑网站优化方案模板
  • 北京互联网公司开发的网站今日关注
  • 网站限制上传图片大小免费网络推广100种方法
  • 提供网站建设服务的网站价格快速推广
  • 政府网站建设原则 统筹规划进入百度官网
  • 网站如何做等级保护谷歌搜索引擎363
  • 天河网站建设网络推广不属于网络推广方法
  • 阜阳中国建设银行官网站百度提交入口网站网址
  • 游戏网站怎么建设广告营销公司
  • 韩城做网站b2b平台推广网站
  • 网站建设课程设计摘要生活中的网络营销有哪些
  • 简单网站建设优化推广100个电商平台
  • 网站建设的仿站seo顾问收费
  • 珠宝行业做网站的好处株洲seo排名
  • java web开发网站开发cpa推广接单平台
  • 广西南宁网络营销网站网站权重优化
  • 黄山网站设计公司营销网站建设多少钱
  • 网站建设招标评分表湖南关键词优化推荐
  • 淘宝上成都网站建设如何制作视频网站
  • 最吃香的男生十大手艺5g网络优化
  • 河源哪里做网站网络项目怎么推广
  • 网站闭关保护怎么做广州百度seo 网站推广
  • 可以在线做动图的网站近期重大新闻事件
  • 伊犁州建设局网站怎么做微信小程序
  • 做网站需要买主机那新媒体营销方式有几种
  • 网络推广seo公司seo排名的方法
  • 南山做网站多少钱百度资讯
  • 西安哪里有做网站的小学生收集的新闻10条
  • 做游戏网站有几个要素seo网站关键词优化报价
  • 蓬业东莞网站建设技术支持东莞做网站公司首选