32.图片上传功能

上传图片功能

java 复制代码
 @PostMapping("blog")
    public ApiResponse uploadImage(@RequestParam("file") MultipartFile image) {

        try {
            //获取原始文件名称
            String originalFilename = image.getOriginalFilename();
            //生成新的文件名
            String fileName = createNewFileName(originalFilename);
            //保存文件
            image.transferTo(new File(UserConstant.IMAGE_UPLOAD_DIR, fileName));
            //返回结果
            log.debug("文件上传成功,{}", fileName);
            return ApiResponse.success(fileName);
        }catch (Exception e) {
            throw new RuntimeException("文件上传失败", e);
        }

    }

    private String createNewFileName(String originalFilename) {
        //获取后缀名
        String suffix = StrUtil.subAfter(originalFilename, ".", true);
        //生成目录
        String name = UUID.randomUUID().toString();
        int hash = name.hashCode();
        int d1 = hash & 0xF;
        int d2 = (hash >> 4) & 0xF;
        //判断目录是否存在
        File dir = new File(UserConstant.IMAGE_UPLOAD_DIR, StrUtil.format("/blogs/{}/{}", d1, d2));
        if(!dir.exists()) {
            dir.mkdirs();
        }
        //生成文件名
        return StrUtil.format("/blogs/{}/{}/{}.{}", d1, d2, name, suffix);
    }

分页查询功能

java 复制代码
@Override
    public List<Blog> queryHotBlog(Integer current) {
        //根据点赞数量倒序排列
        Page<Blog> page = query().orderByDesc("liked")
                .page(new Page<>(current, UserConstant.MAX_PAGE_SIZE));
        List<Blog> records = page.getRecords();
        //这里采用lambda表达式简写
        records.forEach(this::queryBlogUser);
        return records;
    }


/**
     * 给BLog对象添加用户信息
     * @param blog
     */
    private void queryBlogUser(Blog blog) {
        User user = userService.getById(blog.getUserId());
        blog.setName(user.getNickName());
        blog.setIcon(user.getIcon());
    }

注意lambda简写

mybatis中使用query()方法分页查询的写法

java 复制代码
@Override
    public void likeBlog(Integer id) {
        // update tb_blog set ... where
        update().setSql("liked = liked + 1").eq("id", id).update();
    }

mybatis中update()方法使用

相关推荐
云烟成雨TD12 分钟前
Spring AI 1.x 系列【28】基于内存和 MySQL 的多轮对话实现案例
java·人工智能·spring
Lyyaoo.14 分钟前
【JAVA基础面经】String、StringBuffer、StringBuilder
java·开发语言
TeamDev20 分钟前
JxBrowser 8.18.2 版本发布啦!
java·前端·跨平台·桌面应用·web ui·jxbrowser·浏览器控件
晴天sir24 分钟前
Redis 在业务中的几种典型用法
java·数据库·redis
WJX_KOI29 分钟前
MemOS —— 为大语言模型 (LLMs) 和智能体打造的记忆操作系统。
java·人工智能·语言模型
_日拱一卒34 分钟前
LeetCode:矩阵置零
java·数据结构·线性代数·算法·leetcode·职场和发展·矩阵
weixin_4080996737 分钟前
【实战教程】懒人精灵如何实现 OCR 文字识别?接口调用完整指南(附可运行示例)
java·前端·人工智能·后端·ocr·api·懒人精灵
花千树-0101 小时前
Java Agent 集成 MCP 工具协议:让 AI 真正驱动企业系统
java·ai·langchain·ai agent·mcp·harness·j-langchain
橘子编程1 小时前
GoF 23 种设计模式完整知识总结与使用教程
java·c语言·开发语言·python·设计模式
君以思为故1 小时前
认识Linux -- 线程同步与互斥
java·开发语言