使用ruoyi框架遇到的问题修改记录

news2024/9/30 11:27:42

使用ruoyi框架遇到的问题修改记录

文章目录

  • 使用ruoyi框架遇到的问题修改记录
    • 上传后文件名改变
    • 上传时设置单多文件及其他选项
    • 附件显示文件名,点击下载
    • 附件直接显示图片
    • 表格固定列
    • 查询数据库作为下拉选项值
    • 字典使用
    • 加入json递归注解,防止无限递归内存溢出
    • 中文路径访问不到问题
    • 前端传过来的 id 后端接收到后加入了000,不对

上传后文件名改变

image-20231024202729118

上传时设置单多文件及其他选项

Html

<div class="form-group">
            <label class="col-sm-3 control-label">附件
                :</label>
            <div class="col-sm-8">
                <input type="hidden" name="attachment">
                <div class="file-loading">
                    <input class="singleFile" name="file" type="file" id="attachment">
                </div>
<!--                <div class="file-loading">-->
<!--                    <input class="form-control multipleFile" id="attachment" name="files" type="file" multiple>-->
<!--                </div>-->
            </div>
        </div>

Js代码

 // 单图上传
    $(".singleFile").fileinput({
        uploadUrl: ctx + 'common/upload',
        maxFileCount: 1,
        autoReplace: true
    }).on('fileuploaded', function (event, data, previewId, index) {
        var rsp = data.response;
        log.info("return url:" + rsp.url)
        log.info("reutrn fileName:" + rsp.fileName)
        $("input[name='" + event.currentTarget.id + "']").val(rsp.fileName)
    }).on('fileremoved', function (event, id, index) {
        $("input[name='" + event.currentTarget.id + "']").val('')
    })

    // 多图上传
    $(".multipleFile").fileinput({
        uploadUrl: ctx + 'common/uploads',
        maxFileCount: 1,
        uploadAsync: false,
        autoReplace: true
    }).on('filebatchuploadsuccess', function (event, data, previewId, index) {
        //var rsp = data.data.name;
        var fileJson = data.response.data;
        var urlList = [];
        for (var i in fileJson) {
            console.log("return data.url:" + fileJson[i].url)
            console.log("reutrn data.name:" + fileJson[i].name)
            urlList.push(fileJson[i].name)
            urlList.join(",")
        }
        $("input[name='" + event.currentTarget.id + "']").val(data.response.data[0].name)
    }).on('fileremoved', function (event, id, index) {
        $("input[name='" + event.currentTarget.id + "']").val('')
    })

附件显示文件名,点击下载

 {
                    field: 'attachment',
                    title: '附件',
                    formatter: function (value, row, index) {
                        var prefix = ctx + row.attachment;
                        // 图片预览(注意:如存储在本地直接获取数据库路径,如有配置context-path需要使用ctx+路径)
                        // 如:/profile/upload/2019/08/08/3b7a839aced67397bac694d77611ce72.png
                        return  $.table.downFile(value, row, index);
                    }
                },
// 文件下载
            downFile: function (value, row, index) {
                const http = value.split('?')[0];
                const dot = http.lastIndexOf(".");
                const ext = http.substr(dot + 1);

                let file = http.split('/');
                let name = file[file.length - 1];
                if ($.common.isNotEmpty(value)) {
                    if(isAssetTypeAnImage(ext)) {
                        let imgWtdth=0;
                        let imgHeight=0;
                        let img = new Image();
                        if(img.complete){
                            // 打印
                            imgWtdth=img.width;
                            imgHeight=img.height;
                        }else{
                            // 加载完成执行
                            img.onload = function(){
                                // 打印
                                imgWtdth=img.width;
                                imgHeight=img.height;
                            }
                        }
                        img.src = value;
                        imgWtdth=img.width;
                        imgHeight=img.height;

                        if(browserRedirect()){
                            const w = document.documentElement.scrollWidth || document.body.scrollWidth;
                            const h = document.documentElement.scrollHeight || document.body.scrollHeight;

                            if(imgWtdth>w || imgHeight >h){
                                return $.table.imageView(value,h*0.8,imgWtdth*h/imgHeight*0.8);
                            }else {
                                return $.table.imageView(value);
                            }
                        }else {
                            const w2 = document.body.clientWidth || document.documentElement.clientWidth;
                            const h2=  document.body.clientHeight || document.documentElement.clientHeight;
                            // if(imgWtdth === 0 || imgHeight === 0 ){
                            //     return $.table.imageView(value,h2*0.8,w2*0.8);
                            // }
                            if(imgWtdth>w2 || imgHeight >h2 || imgWtdth === 0 || imgHeight === 0){
                                    return $.table.imageView(value,imgHeight*w2/imgWtdth*0.8,w2*0.8);
                            }else {
                                return $.table.imageView(value);
                            }
                        }
                    }else{
                        return $.common.sprintf("<a href='%s' download='%s'>%s</a>",value,name,name);
                    }
                } else {
                    return $.common.nullToStr(value);
                }
            },

//判断文件是否为图片
function isAssetTypeAnImage(ext) {
    return [
        'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
    indexOf(ext.toLowerCase()) !== -1;
}

// 判断设备是移动还是pc
function browserRedirect() {
    //document.writeln("您的浏览设备为:"+getDevice());
    if(!window.navigator) {
        //alert("提示","当前设备:移动端APP")
        return false;
    }
    else{
        if(/Mobile|Android|webOS|iPhone|iPad|Phone/i.test(navigator.userAgent)){
            //alert("当前设备:移动端H5");
            return false;
        }
        else{
           // alert("当前设备:PC端");
            return true;
        }
    }
}

附件直接显示图片

image-20231024202817065

表格固定列

image-20231024202852334

查询数据库作为下拉选项值

image-20231024202919169

这自动生成代码,已经做了修改,可以获取 *****all();

字典使用

image-20231024203157416

使用自动生成代码,添加使用的字典,手动修改代码或添加,请参考自动生成后代码

加入json递归注解,防止无限递归内存溢出

中文路径访问不到问题

\ruoyi-framework\src\main\java\com\ruoyi\framework\config\ShiroConfig.java

import org.apache.shiro.web.filter.InvalidRequestFilter;
import org.apache.shiro.web.filter.mgt.DefaultFilter;

 /**

- Shiro过滤器配置
/
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager)
{
   ......

//关闭 中文路径 校验 ckinder 上传和打开中文名字文件
        InvalidRequestFilter invalidRequestFilter = new InvalidRequestFilter();
        invalidRequestFilter.setBlockNonAscii(false);
        shiroFilterFactoryBean.getFilters().put(DefaultFilter.invalidRequest.name(), invalidRequestFilter);

......
}

image-20231024203445317

前端传过来的 id 后端接收到后加入了000,不对

image-20231024203955841

解决方法:

在pom.xml 中加入

org.springframework spring-webmvc 5.3.9 compile

然后,在E:\monitor\websit\ltt-websit\ruoyi-common\src\main\java\com\ruoyi\common\config

增加 WebConfiguration.java 文件,内容如下,就是将long转string

package com.ruoyi.common.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/**
 * @description: WebConfiguration
 * @Author: llt
 * @date: Created in 2021/9/9 17:46
 *@version: 0.1.0
 * @modified By:
 */
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
    /**
     * 序列化json时,将所有的long变成string
     * 因为js中得数字类型不能包含所有的java long值
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule simpleModule=new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        converters.add(0,jackson2HttpMessageConverter);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix安装与部署

前言 Zabbix是一个开源的网络监控和系统监控解决方案&#xff0c;用于监控服务器、网络设备、应用程序和服务。它基于客户端-服务器体系结构&#xff0c;使用多种监控选项来监控不同类型的设备和应用程序。Zabbix支持数据收集、处理和存储&#xff0c;以及报警和可视化等功能。…

VESTA软件下载

1.进入官网添加链接描述 2.下滑找到对应版本 3.解压 4.找到.exe文件&#xff08;不用安装&#xff09;

JSX 列表渲染

学习目标&#xff1a; 能够在 JSX 中实现列表渲染 页面的构建离不开重复的列表结构&#xff0c;比如歌曲列表&#xff0c;商品列表等等&#xff0c;Vue 中用的式 v-for 做到这一点&#xff0c;react 中又该如何实现呢&#xff1f; 实现&#xff1a; 使用数组的 map 方法 案例: …

【数据科学赛】2023年亚太眼科学会大数据竞赛 #$15000 #阿里天池 #分类

CompHub[1] 最新的比赛会第一时间在群里通知&#xff0c;欢迎加群交流比赛经验&#xff01;&#xff08;公众号回复“加群”即可&#xff09; 根据比赛主页[2](文末阅读原文)&#xff0c;使用AI辅助生成 大赛概况 2023年亚太眼科学会大数据竞赛由亚太眼科学会&#xff08;Asia…

Xilinx FFT使用说明和测试

Xilinx FFT使用说明和测试 1 IP接口信号2 IP基本配置3 IP功能测试 本文主要介绍Xilinx FFT IP的使用方法 1 IP接口信号 FFT用于计算N点的DFT或者IDFT&#xff0c;N为2m&#xff0c;其中m2~16。IP的输入输出接口如下表所示&#xff0c;主要包括时钟、复位信号&#xff0c;输入的…

ApowerREC v1.2.7.10(多功能屏幕录屏工具)

ApowerREC是一款功能强大的屏幕录制软件&#xff0c;主要特点如下&#xff1a; 支持音画同步录制&#xff1a;可以录制电脑桌面操作、在线会议、娱乐视频等所有活动。提供多种录制模式&#xff1a;包括全屏录制、区域录制、画中画等多种录制视频模式&#xff0c;同时也可以支持…

05、Python -- 爬取ts文件格式视频思路

目录 第一步:爬取一段5秒视频找url代码结果第二步:下载整个视频的所有片段代码:结果:第三步:合成视频安装模块代码:结果简洁代码代码:结果:最终代码简洁前代码简洁后代码思路: 1、爬取视频,但是每次只能爬取一段5秒的视频。 2、一个视频有很多秒,所以需要爬取很多片…

11 结构型模式- 代理模式

结构性模式一共包括七种&#xff1a; 代理模式、桥接模式、装饰者模式、适配器模式、门面(外观)模式、组合模式、和享元模式。 1 代理模式介绍 软件开发中的代理&#xff1a; 代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到了中介的作用,它去掉客…

分享个包含各省、市、区的编码数据的在线静态资源脚本

在翻《SpringBootVue3》——十三尼克陈作者的大型前后端分离项目实战里面&#xff0c;在看到地址管理的部分时&#xff0c;发现了该作者记录有一个静态的地址资源脚本 这里做个记录&#xff0c;打点 一、引入js <script src"https://s.yezgea02.com/1641120061385/td…

Python----range方法(函数)

range 英 /reɪndʒ/ n. &#xff08;变动或浮动的&#xff09;范围&#xff0c;界限&#xff1b;视觉&#xff08;或听觉&#xff09;范围&#xff1b;v. &#xff08;在一定的范围内&#xff09;变化&#xff0c;变动&#xff1b;&#xff08;按一定位置或顺序&#x…

如何通过PAM禁止部分用户登录

如何通过 PAM 限制对 SSH 服务的根访问 如题。客户提出这样一个需求&#xff1a;限制和允许部分账号的SSH登录&#xff0c;限制名单可调。乍一看&#xff0c;这需求完全不合理啊&#xff1f;这又要改多少代码&#xff1f;但——PAM从脑海中一闪而过&#xff0c;想到一个办法&a…

Axi接口的DDR3:参数,时序,握手机制

参考 AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事&#xff1f;_axi wrap-CSDN博客 还有官方手册&#xff0c;名字太长想起来再写。 Transaction/Burst/Transfer/Beat Transaction指一次传输事务&#xff0c;实际上包括了address phase, data phase与response ph…

Git版本管理及使用规范

git是目前为止版本管理的最常用工具之一&#xff0c;利用git的功能&#xff0c;可以很容易的实现版本的发布和留档&#xff0c;让原本杂乱的版本管理问题变得较为简单。 Git分支管理和常用流程 Git的常用分支包括&#xff1a;tag(git的功能&#xff0c;并不是真正的分支)、ma…

测试报告和结果分析 —— allure整合pytest生成测试报告

一、生成HTML测试报告的三种方式&#xff1a; 1、unittest和HTMLTestRunner整合 2、allure和pytest整合 3、Jenkins中安装allure插件&#xff08;Jenkins安装插件出错&#xff0c;不能正常使用&#xff09; 二、allure整合pytest生成html测试报告&#xff1a; 1.下载allur…

云服务介绍

云服务 1.概念 云服务&#xff0c;顾名思义就是云上的服务&#xff0c;简单的来说就是在云厂商&#xff08;例如 AWS、阿里云&#xff09;那里买的服务。 目前国内云厂商有阿里云、腾讯云、华为云、天翼云、Ucloud、金山云等等&#xff0c;国外有亚马逊的 AWS、Google 的 GC…

C++ 读MTK代码 综测校准 PSU经典接口读各种型号开关电源电压或电流 visa

为啥要使用接口&#xff1f;因为有多个电源&#xff0c;接口都相似的。再加型号上层很少改动(类型切换)或不用改。 为啥要使用友元&#xff1f;友元函数的主要作用是允许外部函数或类访问被声明为友元的类的私有成员。 如果不使用友元怎么做&#xff1f;最后回答。 1.C定义dl…

SpringBoot Web 分层解耦

目录 分层解耦三层架构介绍代码拆分 分层解耦耦合问题解耦思路 IOC&DIIOC&DI入门IOC详解bean的声明组件扫描 DI详解 在SpringBoot Web请求响应这篇文章的案例中提到&#xff0c;解析XML数据&#xff0c;获取数据的代码&#xff0c;处理数据的逻辑的代码&#xff0c;给页…

教你如何给『linux』打补丁

前言 我们在参与某些开源项目的过程当中&#xff0c;经常会遇到漏洞之类的问题&#xff0c;需要我们打补丁解决。尤其是 Linux 源码&#xff0c;源码代码量较多&#xff0c;在修改完内核并发布新内核的时候&#xff0c;基本采用补丁的方式进行发布&#xff0c;而不是将整个内核…

【LeetCode刷题】2两数相加

2. 两数相加 JAVA代码 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xf…

MAC-设置mysql开机自启动

mac 设置mysql开机自启动 - MoonyHee - 博客园