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

怎样做旅游城市住宿网站wordpress随机评论头像

怎样做旅游城市住宿网站,wordpress随机评论头像,网站模板含数据库下载,网上提交报名表系统的网站建设简介 本文主要以文件上传为demo#xff0c;介绍了一些 springboot web 开发的入门的技术栈。 对应刚接触 springboot 的可以参考下。 主要包括文件md5比对、生成图片缩略图、数据库迁移、文件记录持久化、请求全局异常处理等功能。 准备工作 在 idea 中创建项目#xff…简介 本文主要以文件上传为demo介绍了一些 springboot web 开发的入门的技术栈。 对应刚接触 springboot 的可以参考下。 主要包括文件md5比对、生成图片缩略图、数据库迁移、文件记录持久化、请求全局异常处理等功能。 准备工作 在 idea 中创建项目java8 , springboot 2 maven 所需依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.bimcc/groupIdartifactIdiot/artifactIdversion0.0.1-SNAPSHOT/versionnameiot/namedescriptioniot/descriptionpropertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version2.6.13/spring-boot.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--数据库迁移 --dependencygroupIdorg.flywaydb/groupIdartifactIdflyway-core/artifactIdversion5.2.4/version/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.2/version/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!--请求验证--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactIdversion2.7.8/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion20.0/version/dependency!--工具包--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.4.0/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/versionconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/versionconfigurationmainClasscom.bimcc.iot.IotApplication/mainClassskiptrue/skip/configurationexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build/project 创建项目目录 目录意义如下 修改 application.yml 配置 --- # 开发环境的配置 server:port: 9090 spring:controller:api-prefix: /apiflyway:enabled: true #开启数据迁移table: flyway_schema_history #用于存储迁移历史记录的表名默认为flyway_schema_historybaseline-on-migrate: true #当迁移数据库存在但没有元数据的表时自动执行基准迁移新建flyway_schema_history表locations: classpath:db/migration #数据库迁移脚本的位置默认为classpath:db/migrationclasspath 羡慕resources目录clean-disabled: true #用于控制是否禁用 Flyway 的 clean 操作。datasource:username: rootpassword: rooturl: jdbc:mysql://127.0.0.1:3306/java_iot?serverTimezoneGMT%2b8config:activate:on-profile: dev #开发环境servlet:multipart:enabled: true # 允许文件上传max-file-size: 20971520 # 单文件最大限制 20Mmax-request-size: 52428800 # 单次请求最大限制 50M file:upload:path: E:\project-java\java-upload # 文件上传保存服务器绝对路径suffix: jpg,jpeg,png,bmp,xls,xlsx,pdf # 文件上传保存路径is-thumb: true # 是否开启缩略图 true falseproportion: 5 # 缩略图缩放比例path-pattern: uploads # 访问虚拟目录 log:level: INFO # INFO DEBUG ERROR ---# 当前启用的配置 spring:application:name: iot # 应用平台profiles:active: dev # 当前环境创建数据表迁移文件 写入以下内容 CREATE TABLE sys_file (id INT AUTO_INCREMENT COMMENT id,file_name VARCHAR(255) NOT NULL COMMENT 文件名称,ip VARCHAR(255) COMMENT 上传ip,file_path VARCHAR(255) NOT NULL COMMENT 文件路径,thumb_path VARCHAR(255) COMMENT 缩略图文件路径,file_size INT COMMENT 字节大小,file_type VARCHAR(255) COMMENT 文件类型,file_ext CHAR(36) COMMENT 文件后缀,file_md5 VARCHAR(255) COMMENT 文件md5,created_at DATETIME COMMENT 创建时间,updated_at DATETIME COMMENT 修改时间,deleted_at DATETIME COMMENT 删除时间,PRIMARY KEY (id) ) ENGINE InnoDB DEFAULT CHARSET UTF8MB4;创建上传实体类 在 dto目录 创建 BaseEntity 及 FileEntity 实体类 BaseEntity 写入以下内容 // 省略 package import Data public class BaseEntity implements Serializable {TableId(value id,type IdType.AUTO)private Integer id;JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8) //格式化时间空值不会格式化TableField(value created_at,fill FieldFill.INSERT)JsonProperty(created_at) //json格式化显示字段private Date createdAt;JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8)TableField(value updated_at,fill FieldFill.INSERT_UPDATE)JsonProperty(updated_at)private Date updatedAt;JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8)JsonProperty(deleted_at)TableField(value deleted_at)TableLogic(value null,delval now())private Date deletedAt;} FileEntity 写入以下内容 // 省略 package import Data TableName(sys_file) public class FileEntity extends BaseEntity {TableField(value file_name)private String fileName;TableField(value ip)private String ip;TableField(value file_path)private String filePath;TableField(value thumb_path)private String thumbPath;TableField(value file_size)private Long fileSize;TableField(value file_type)private String fileType;TableField(value file_ext)private String fileExt;TableField(value file_md5)private String fileMd5; } 创建 mapper , 在 mapper 目录创建 FileMapper 接口类 // 省略 package import Mapper public interface FileMapper extends BaseMapperFileEntity {FileEntity queryByMd5(String md5); } 创建 mapper xml 文件。在 resources 目录下面创建 mapper 目录然后再创建 FileMapper.xml。并写入以下内容 ?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.bimcc.iot.mapper.FileMapper!-- 询的结果集字段和实体类的user属性名不一致自定义查询结果集的映射规则 --resultMap idqueryFile typecom.bimcc.iot.dto.FileEntityid propertyid columnid/result propertyfileName columnfile_name/result propertyip columnip/result propertyfilePath columnfile_path/result propertyfileSize columnfile_size/result propertyfileType columnfile_type/result propertyfileExt columnfile_ext/result propertyfileMd5 columnfile_md5/result propertycreatedAt columncreated_at/result propertyupdatedAt columnupdated_at/result propertydeletedAt columndeleted_at//resultMapselect idqueryByMd5 resultMapqueryFileselect * from sys_file where file_md5 #{md5} and deleted_at is null/select/mapper全局异常处理 在 exceptin 目录里面创建 ServiceException 类编写如下代码 // 省略 package import //专用于处理业务层的异常基类 public class ServiceException extends RuntimeException{public ServiceException() {super();}public ServiceException(String message) {super(message);}public ServiceException(String message, Throwable cause) {super(message, cause);}public ServiceException(Throwable cause) {super(cause);}protected ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);} } 在 controller 目录里面创建 BaseController 基类后续 controller 继承他 // 省略 package import ControllerAdvice public class BaseController {public static final int OK 200;/*** 全局手动抛出异常处理* 1.当出现了value内的异常之一就会将下方的方法作为新的控制器方法进行执行* 因此该方法的返回值也同时是返回给前端的页面* 2.此外还自动将异常对象传递到此方法的参数列表中这里使用Throwable e来接收**/ExceptionHandler(ServiceException.class) //统一处理抛出的异常public ResJsonVoid handleException(Throwable e){ResJsonVoid result new ResJson(e);result.setCode(5000); //数据库或服务器有问题return result;}} 注册配置 在 config 目录创建 GlobalControllerPathPrefixConfig 类写入以下内容 // 省略 package import //群集统一配置接口前缀 Configuration public class GlobalControllerPathPrefixConfig implements WebMvcConfigurer {Value(${spring.controller.api-prefix})private String pathPrefix;Value(${file.upload.path-pattern})private String pathPattern;Value(${file.upload.path})private String fileUploadPath;//全局接口注册 api前缀Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {configurer.addPathPrefix(pathPrefix, c - c.isAnnotationPresent(RestController.class));}//静态资源图片上传虚拟路径返回Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//将匹配上/files/**虚拟路径的url映射到文件上传到服务器的目录获取静态资源registry.addResourceHandler(/ pathPattern /**).addResourceLocations(file: fileUploadPathFile.separator);WebMvcConfigurer.super.addResourceHandlers(registry);}}创建工具类 创建一个全局返回类。在 utils 里面创建一个 ResJson 类型 // 省略 importData public class ResJsonE implements Serializable {/*** 状态码*/private Integer code;/*** 提示信息*/private String message;/*** 返回数据*/private E data;public ResJson(Integer code) {this.code code;}public ResJson(Integer code,String message) {this.code code;this.message message;}public ResJson(Throwable e) {this.message e.getMessage();}public ResJson(Integer code,String message,E data) {this.code code;this.data data;this.message message;}} 创建一个 md5 加密类。在 utils 里面创建一个 PasswordEncryptedUtils 类型 // 省略 package import public class PasswordEncryptedUtils {public static String getPasswordByMD5(String pwd,String salt){for (int i 0; i 3 ; i) {//md5加密算法的调用pwd DigestUtils.md5DigestAsHex((salt pwd salt).getBytes()).toUpperCase();}//返回经过加密的结果return pwd;} } 创建上传服务 在server目录里面创建FileServer 接口类 // 省略 package import public interface FileServer {FileEntity upload(MultipartFile file);String createThumb(String fileDir,String filePath,String fileName,String suffix);} 在server目录里面创建impl目录并在里面创建FileServerImpl类实现上面的接口功能 // 省略 package import Service public class FileServerImpl implements FileServer {public static final int maxWidth 100;//拦截的url虚拟路径public String pathPattern uploads;//文件磁盘路径Value(${file.upload.path})private String fileUploadPath;Value(value ${file.upload.suffix:jpg,jpeg,png,bmp,xls,xlsx,pdf})private String fileUploadSuffix;Value(value ${file.upload.is-thumb})private Boolean isThumb;Value(value ${file.upload.proportion})private Integer proportion;AutowiredHttpServletRequest request;AutowiredFileMapper fileMapper;//文件上传Overridepublic FileEntity upload(MultipartFile file) {FileEntity fileRes new FileEntity();if (file.isEmpty()) {// log.error(the file to be uploaded is empty);return fileRes;}ListString suffixList Lists.newArrayList(fileUploadSuffix.split(,));try {//校验文件后缀String originalFilename file.getOriginalFilename();//获取文件类型String type FileUtil.extName(originalFilename);//文件后缀String suffix originalFilename.substring(originalFilename.lastIndexOf(.) 1);if (!suffixList.contains(suffix)) {//log.error(unsupported file format);return fileRes;}//获取文件md5String md5 SecureUtil.md5(file.getInputStream());// 从数据库查询是否存在相同的记录FileEntity dbFiles fileMapper.queryByMd5(md5);if (dbFiles ! null) { // 文件已存在return dbFiles;}String year new SimpleDateFormat(yyyy).format(new Date());String month new SimpleDateFormat(MM).format(new Date());String day new SimpleDateFormat(dd).format(new Date());String fileDir fileUploadPath;String filePath File.separator year File.separator month File.separator day File.separator;//首次需生成目录File folder new File(fileDir filePath);if (!folder.exists()) {folder.mkdirs();}AtomicInteger counter new AtomicInteger(0);String uniqueString String.valueOf(Instant.now().toEpochMilli());String fileName uniqueString . suffix;String absolutePath fileDir filePath fileName;file.transferTo(new File(absolutePath));//网页路径String dataFilePath pathPattern / year / / month / day / fileName;fileRes.setFilePath(dataFilePath);fileRes.setFileName(fileName);fileRes.setIp(request.getRemoteAddr());fileRes.setFileSize(file.getSize() / 1024);fileRes.setFileType(type);fileRes.setFileExt(suffix);fileRes.setFileMd5(md5);//判断是否生成缩率图if (isThumb) {createThumb(fileDir, filePath, uniqueString, suffix);String dataFileThumbPath pathPattern / year / / month / day / uniqueString _thumb. suffix;fileRes.setThumbPath(dataFileThumbPath);}fileMapper.insert(fileRes);} catch (IOException e) {e.printStackTrace();throw new ServiceException(e.getMessage());}return fileRes;}//生成缩率图Overridepublic String createThumb(String fileDir, String filePath, String fileName, String suffix) {String localPath fileDir filePath fileName . suffix;String thumbPath fileDir filePath fileName _thumb. suffix;//判断缩略图是否存在Path path Paths.get(thumbPath);if (Files.exists(path)) {return filePath fileName _thumb. suffix;}File originalFile new File(localPath);try {BufferedImage originalImage ImageIO.read(originalFile);int imageWidth originalImage.getWidth();int imageHeight originalImage.getHeight();double thumbWidth 0;double thumbHeight 0;if (imageWidth maxWidth || imageHeight maxWidth) {thumbWidth (double) imageWidth / (double) proportion;thumbHeight (double) imageHeight / (double) proportion;}if (thumbHeight 0) {// 创建缩略图BufferedImage thumbnail new BufferedImage((int) thumbWidth, (int) thumbHeight, BufferedImage.TYPE_INT_RGB);Graphics graphics thumbnail.createGraphics();graphics.drawImage(originalImage.getScaledInstance((int) thumbWidth, (int) thumbHeight, Image.SCALE_SMOOTH), 0, 0, null);graphics.dispose();// 输出到文件ImageIO.write(thumbnail, suffix, new File(thumbPath));return filePath fileName _thumb. suffix;}} catch (IOException e) {e.printStackTrace();throw new ServiceException(e.getMessage());}return ;}} 上传 创建一个上传控制器UploadController写入以下内容 // 省略 package import RestController public class UploadController extends BaseController {AutowiredFileServer fileServer;PostMapping(/upload)public ResJsonFileEntity upload(RequestParam MultipartFile file){FileEntity fileRes fileServer.upload(file);return new ResJson(OK,上传成功,fileRes);}} 测试 通过 postman 接口测试调用上面的上传接口 查看application.yml里面配置的上传目录是否有文件 通过网络路径访问图片 总结 本文适合 springboot 入门的初学者。 以文件上传为demo衍生出了一些常用功能包含文件上传入库请求。异常处理api前缀数据迁移生成缩略图等功能。 希望能对初学者有一个参考的作用。 – 欢迎点赞、关注、转发、收藏【我码玄黄】gonghao同名
http://www.lakalapos1.cn/news/23596/

相关文章:

  • 国人在线做网站怎么样福田瑞沃大金刚
  • 建设企业网站企业网上银行官网官方wordpress 4.9 站群
  • 玛迪做网站保定城乡建设局网站
  • 网站做推广需要多少钱手机和网站页面模板
  • 专门做折扣的网站如何做收费网站
  • 水多多dili大连seo外包公司
  • 网站后台动态播放怎么做的九江网站建设九江
  • 科技网站导航奥数辅导机构网站建设
  • iis网站属性在哪军事网址大全 网站
  • 网站建设无广告公司 宜宾网站建设
  • 网站运营者在线logo
  • 企业手机端网站源码昆明网站建设价位
  • 河北省建设厅网站手机版资阳网站开发
  • 国家批准的正规学历提升机构杭州百度百家号seo优化排名
  • 三台网站seo软件注册推广平台
  • 网站建设与管理行业发展情况枣庄定制网站建设公司
  • 重庆哪有作网站的ui设计是什么部门
  • 网站建立公司网站建设教程网
  • 郑州网站建设网站建设制作好的网页怎么变成网站
  • 汉阴网站建设成都企业网站营销设计
  • 做乡村旅游的网站石家庄自适应网站建设
  • 在家给别人做网站合法吗安徽省工程建设信用平台网站
  • 网站站点查询向国旗敬礼 做新时代好少年网站
  • 美食电子商务网站建设规划书阿里云服务器责任怎么做网站
  • 合肥地区网站制作wordpress国内几大主题
  • 亚马逊aws永久免费下载百度关键词优化大
  • 宣威市住房和城乡建设局网站下载中心泉州共创科技
  • 怎么建设游戏网站php外贸网站
  • 加大门户网站安全制度建设wordpress 首页修改
  • 汉中专业网站建设公司wordpress部署文件夹