精华内容
下载资源
问答
  • 后台接收图片报错 request is not a multipart request multipart boundary was found request is not a multipart request 可能是因为前端没有指定请求头 Content-Type 为 multipart/form-data ,但是这个请求头...

    后台接收图片报错 request is not a multipart request 和 multipart boundary was found

    request is not a multipart request 可能是因为前端没有指定请求头 Content-Type 为 multipart/form-data ,但是这个请求头不必在headers中指定。

    如果直接在headers中指定,后端会因为检测不到 multipart boundary 而报错 the request was rejected because no multipart boundary was found 我们需要使用formData自动配置

    FormData 接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去,本接口和此方法都相当简单直接。如果送出时的编码类型被设为 "multipart/form-data",它会使用和表单一样的格式。

    ———— https://developer.mozilla.org/zh-CN/docs/Web/API/FormData

    解决方案

    前端:

              // 这种方式会自动配置 multipart boundary
    					let formData = new FormData()
              formData.append('file', data, 'file.png')
              //调用接口
              const xmlhttp = new XMLHttpRequest()
              xmlhttp.open('POST', 'http://localhost:8080/user/upload/avatar', true)
              xmlhttp.send(formData)
              xmlhttp.onreadystatechange = function () {
    						// 请求发送之后的回调
              }
    

    formData.append(name, value, filename);

    参数

    • name

      value中包含的数据对应的表单名称。

    • value

      表单的值。可以是USVStringBlob (包括子类型,如 File)。

    • filename可选

      传给服务器的文件名称 (一个 USVString), 当一个 BlobFile 被作为第二个参数的时候, Blob 对象的默认文件名是 “blob”。 File 对象的默认文件名是该文件的名称。

    注意: 如果你指定一个 Blob 作为数据添加到 FormData 对象中, 文件名会被放在 “Content-Disposition” 头部(常常会根据浏览器变化而变化)传给服务器。

    ———— https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/append

    后端:

     @RequestMapping(value = "/upload/avatar", method = RequestMethod.POST)
        public Msg uploadAvatar(
                @RequestParam(value = "file") MultipartFile file,
                HttpServletRequest request
        ){
            // 文件判定
            if (null == file) {
                return Msg.fail().add("msg", "请选择要上传的图片");
            }
            if (file.getSize() > 1024 * 1024 * 10) {
                return Msg.fail().add("msg", "文件大小不能大于10M");
            }
            //获取文件后缀
            String suffix = Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf(".") + 1);
            if (!"jpg,jpeg,gif,png".toUpperCase().contains(suffix.toUpperCase())) {
                return Msg.fail().add("msg", "请选择jpg,jpeg,gif,png格式的图片");
            }
            String savePath = null;
            try {
                savePath = " "; // 保存地址
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            File savePathFile = new File(savePath);
            if (!savePathFile.exists()) {
                //若不存在该目录,则创建目录
                savePathFile.mkdir();
            }
    
            //用户头像名称就是用户的id
            String filename = user.getUserId() + "." + suffix;
    
            try {
                //将文件保存指定目录
                file.transferTo(new File(savePath + filename));
            } catch (Exception e) {
                e.printStackTrace();
                return Msg.fail().add("msg", "保存文件异常");
            }
    
    //        //返回文件名称
            return Msg.success().add("suc", true);
        }
    

    这样就可以了。

    依然存在的缺陷

    这种方式需要使用 XMLHttpRequest.send() ,而我在这个项目中使用的是统一管理的 axios ,使用这种方式会破坏项目的可维护性。

    把formdata 传入已封装好的axios调用的时候,后端仍然报错 request is not a multipart request

    这个问题还未解决,希望路过的大佬可以指点一二,未完待续。

    展开全文
  • element-plus form ref model值的关系 感悟的记录 elementui 是一个优秀的前端ui, 现在vue3 出来了,本人也想抓紧时间,赶紧给自己充电加油。现在的element-plus 是一个beta版本,我安装的element-plus 是 "^...

    element-plus form ref 和 model值的关系

    感悟的记录

    elementui 是一个优秀的前端ui, 现在vue3 出来了,本人也想抓紧时间,赶紧给自己充电加油。现在的element-plus 是一个beta版本,我安装的element-plus 是 "^1.0.1-beta.24",遇到这个问题的时候是 "^1.0.1-beta.18" 这个版本,反正都是beta版本,只是解决了一些问题。我在element-plus 的 issue 里面看到了form表单中 ref 和 model 里面的值相同的时候,form表单时不能够修改的。有小伙伴回答到,当然不可以修改,去看vue的官方文档关于ref,所以个人觉得官方时不会修复这个问题了,在此记录一下,自己学习的心得。

    问题

    当使用element-plus的form表单的时候,ref 里面和 model 里面的绑定的值都时由setup函数返回的,页面里面的form表单无法添加值,并且控制台也报出警告,说form里面的表单的属性渲染通过,但是实例里面没有定义 Property xxx was accessed during render but is not defined on instance
    在这里插入图片描述
    页面上打印from,里面却含有一些奇怪的值。
    在这里插入图片描述
    setup 里面导出的是一个对象,页面上却发生了大变化?

      setup() {
        const formRef = ref({
          text: '',
          margin: 0,
          size: 100,
          mainColor: '#000',
          subColor: '#fff'
        });
        return {
          form: formRef,
        };
      },
    

    如果看到该文章的同学比较急,可以直接往下面看解决办法,中间的原理可以跳过

    知识分解

    element-plus 中 form表单的model作用

    作用:配合表单验证

    • 目前el-form的model主要用表单验证的,也就是配合el-formrulesel-form-item的prop来使用的。不信的话,你可以增加一个rules和prop(为了调用验证方法,也el-form也加一个ref属性,相当于id或者class选择器的意思),但是不写model,然后验证的话,会提示缺少model,导致无法验证成功

    • 里面的逻辑大概是,在el-form-item上写一个prop,这个prop左手对应着数据源(即用model.prop找到对应的数据源),右手对应着验证规则(即用rules.prop找到对应的规则)。然后就快乐地验证去了。

    • 至于为什么不能将el-form的model+el-form-tem的prop这样的组合和表单中的v-model的用法合二为一,最直观的原因就是:作用于不同的标签,一种是针对表单的双向绑定一种是针对el-form和el-form-item的验证(虽然这个验证的数据源最终就是表单那边双向绑定得来的);其次,你感觉一下,一边是利用双向绑定提供数据,另一边是拿到数据和规则进行验证,这两边没有很死板地捆绑在一起啊,类似于耦合度不高,未来自定义或者修改的话会方便很多

    • 源码中使用model 的地方,我们也可以看到,model就是用于表单验证的,如下图:
      在这里插入图片描述

    vue中ref的作用

    vue2 :通过 vm.$refs来获取ref的指定的元素和dom实列
    在这里插入图片描述
    vue3中:和vue2的用法一样
    如果vue3中不使用setup函数,里面的ref是一样的,但是如果使用setup的话,并且如果ref绑定的值是setup返回的话,就会产生后面的结果。作为模板使用的引用与任何其他引用的行为一样:它们是响应式的,可以传递给(或从)composition 函数中返回,我们可以很简单的理解,就是ref可以直接绑定 setup中返回的值,在虚拟DOM修补算法,如果VNode ref的键对应一个裁判在渲染上下文,VNode的相应元素或组件实例的值将分配给裁判。这是虚拟DOM挂载/补丁过程中执行,所以参模板后只会分配值初始渲染. 原文
    回到我们的代码中,我们可以发现,我们from对象在dom编译挂载的时候,已经被改变了,所以页面上才会出现model 和那些属性不存在的问题。

    import {ref,onMounted} from "vue";
    export default {
      setup() {
        // 连接的地址,或者文件
        const formRef = ref({
          text: '',
          margin: 0,
          size: 100,
          mainColor: '#000',
          subColor: '#fff'
        });
        onMounted(() => {
          // the DOM element will be assigned to the ref after initial render
          console.log(formRef.value,'===------') // 打印的是一个dom对象
        })
        console.log(formRef.value) // 这行代码会先打印,打印我们的form对象,原因是 js的事件循环机制
        return {
          form: formRef,
        };
      },
      
    

    在这里插入图片描述

    在这里插入图片描述

    解决办法

    • 如果不需要做表单验证,可以不需要使用model,可以不使用这个属性
    • 如果需要做表单验证,ref 和 model 绑定的值不一样,就不会出现这个问题了

    效果

    在这里插入图片描述

    展开全文
  • 在运行一段RNN代码时候突然出现h5py is running against HDF5 1.10.5 when it was built against 1.10.4,导致无法运行。我以为是包的版本太高了,从而降到了1.10.4,最后导致了更多的问题,以致重新创建了python的...
    • 在运行一段RNN代码时候突然出现h5py is running against HDF5 1.10.5 when it was built against 1.10.4,导致无法运行。我以为是包的版本太高了,从而降到了1.10.4,最后导致了更多的问题,以致重新创建了python的虚拟环境。
    • 降到1.10.4之后提示我的GPU不能使用,只能使用CPU。
      Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2。网上说Tensorflow版本问题,关键是我只是降了一个包的版本而已,没有动Tensorflow。最后我重新创建了python的虚拟环境,解决了不能用GPU的问题。
    • 在我运行关于modle.fit的代码时,又出现了以前没有的Cannot convert a symbolic Tensor 问题,我估计是numpy包有问题,我打开了以前的环境发现它是1.19.3的版本,现在是2.x的版本,我又重新装了numpy解决了这个问题。现在重新恢复原状。
    展开全文
  • max key length is 3072 bytes 建立索引时,数据库计算key的长度是累加所有Index用到的字段的char长度后再按下面比例乘起来不能超过限定的key长度 latin1 = 1 byte = 1 character uft8 = 3 byte = 1 character ...

    出错的sql语句:

    CREATE TABLE `AspNetUserTokens` (
        `UserId` varchar(767) NOT NULL,
        `LoginProvider` varchar(767) NOT NULL,
        `Name` varchar(767) NOT NULL,
        `Value` text NULL,
        PRIMARY KEY (`UserId`, `LoginProvider`, `Name`),
        CONSTRAINT `FK_AspNetUserTokens_AspNetUsers_UserId` FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE RESTRICT
    );

    报错:

    Specified key was too long; max key length is 3072 bytes

    建立索引时,数据库计算key的长度是累加所有Index用到的字段的char长度后再按下面比例乘起来不能超过限定的key长度
    latin1 = 1 byte = 1 character 
    uft8 = 3 byte = 1 character 
    gbk = 2 byte = 1 character 

    如果Mysql数据库编码

    用的是Utf8 3*767*3=6903>3072

    用的是GBK 3*767*2=4602>3072

    用的是Latin1 3*767*1=2301<3072

    所以如果你把数据库的编码改成Latin1 上面的语句是可以通过的,但是你要用中文肯定不行

    解决方法:

    修改EF自动生成的语句

    重载你的AppDbContext类中的OnModelCreateing方法

    protected override void OnModelCreating(ModelBuilder builder)
    {
          base.OnModelCreating(builder);
    
          builder.Entity<IdentityUser>(entity => entity.Property(m => m.Id).HasMaxLength(85));
          builder.Entity<IdentityUser>(entity => entity.Property(m => m.NormalizedEmail).HasMaxLength(85));
          builder.Entity<IdentityUser>(entity => entity.Property(m => m.NormalizedUserName).HasMaxLength(85));
    
          builder.Entity<IdentityRole>(entity => entity.Property(m => m.Id).HasMaxLength(85));
          builder.Entity<IdentityRole>(entity => entity.Property(m => m.NormalizedName).HasMaxLength(85));
    
          builder.Entity<IdentityUserLogin<string>>(entity => entity.Property(m => m.LoginProvider).HasMaxLength(85));
          builder.Entity<IdentityUserLogin<string>>(entity => entity.Property(m => m.ProviderKey).HasMaxLength(85));
          builder.Entity<IdentityUserLogin<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(85));
          builder.Entity<IdentityUserRole<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(85));
    
          builder.Entity<IdentityUserRole<string>>(entity => entity.Property(m => m.RoleId).HasMaxLength(85));
    
          builder.Entity<IdentityUserToken<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(85));
          builder.Entity<IdentityUserToken<string>>(entity => entity.Property(m => m.LoginProvider).HasMaxLength(85));
          builder.Entity<IdentityUserToken<string>>(entity => entity.Property(m => m.Name).HasMaxLength(85));
    
          builder.Entity<IdentityUserClaim<string>>(entity => entity.Property(m => m.Id).HasMaxLength(85));
          builder.Entity<IdentityUserClaim<string>>(entity => entity.Property(m => m.UserId).HasMaxLength(85));
          builder.Entity<IdentityRoleClaim<string>>(entity => entity.Property(m => m.Id).HasMaxLength(85));
          builder.Entity<IdentityRoleClaim<string>>(entity => entity.Property(m => m.RoleId).HasMaxLength(85));
    }

    参考链接

    https://my.oschina.net/airship/blog/1587577

    https://retifrav.github.io/blog/2018/03/20/csharp-dotnet-core-identity-mysql/

     

     

    展开全文
  • 偶然看到一个大佬发的文章,才知道mysql这个索引长度是这样一个用法。 mysql报的错:1071 - Specified key was too long; max key length is 3072 bytes SELECT ROUND(SUM(LENGTH(`school_unit_titl
  • 直接上干货:在使用JPA时 如果使用的保存方法在保存数据库已存在的对象时,而这时你将数据库的已存在的数据传过来并使其主键id为null 这时如果调用JPA的修改方法就出出现这个错误 .解决办法 在一个事务中当使其主键id...
  • 调用函数sigprocmask可以检测或更改其信号屏蔽字,或者在一个步骤中同时执行检测更改。” int sigprocmask(int how, const sigset_t *restrict set,sigset_t *restrict oset); 1)若oset不为空,则进程的当前信号...
  • 问题描述:这是关于Quartz服务部署的集群...实际过程:在单体服务中,引入了Quartz定时任务框架,且使用的是集群模式,当部署了公司的DEV环境以后,由于开发需要,还需要在本地启动服务,这就导致隔一段时间,log就会.
  • 同步WAS管理节点node报如下错误:[17-5-2820:42:04:546CST]00000082NodeSyncEADMS0005E:Thesystemisunabletogeneratesynchronizationrequest:javax.management.JMRuntimeException:ADMN0022E:由于凭证不足或凭证.....
  • Laravel 数据i迁移报错PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes") https://zxyy.me/post-185.html 2020年06月20日...
  • 这里两种方法都会讲解,但我们推荐第1)种方法,因为简单。 1 方法1)更改编译器版本 1、 右键单击工程名,并选择“Properties” 2、 在“General”选项卡中的“Compiler version:”选择当前已有的版本,...
  • sqlalchemy Specified key was too long; max key length is 767 bytes 原因 字符集设成了utf8mb4字符,一个utf8mb4字符使用4btyes,限制最大bytes数为767bytes, 除以4,等于191.75,所以最大是191个string。代码...
  • AND (((`gc`.`is_delete`=0) AND (`gc`.`store_id`=5)) OR (isnull(gc.id))) GROUP BY `name` ORDER BY `g`.`cat_id` 说明数据库刚刚没有导入成功这张表, 那么现在单独导入这张表, 报错: Specified key was too ...
  • Does和Is的区别

    2021-01-13 20:12:03
    展开全部what is the weather当中没有实意动词所以不需要e68a...is和does的具体区别:1、含义不同:is和does用作相应动词的意思有所区别is释义:v. 可理解为是的意思(be的第三人称单数一般现在时)d...
  • The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method websocket推送数据的方法有: session.getBasicRemote().sendText(message); //同步发送 session....
  • was应用服务搭建

    2021-04-16 12:55:19
    一些j2ee知识WAS是典型的j2ee服务器,在开始WAS之前,了解一些j2ee的知识.J2EE全称为Java2 Platform Enterprise EditionJ2EE平台本质上是一个分布式的服务器应用程序设计环境——一个Java环境,它提供了:宿主应用的...
  • 问题描述 在 Jenkins 中,当访问测试报告时,页面无法正常显示(页面没有显示内容)。浏览器控制台显示如下错误消息: ... ...Content Security Policy directive... Note that 'frame-src' was not explicitly set,.
  • ubuntu20.04,运行命令 sudo apt-get install ...The 'catkin-pkg==0.4.18' distribution was not found and is required by the application解决方法 :https://blog.csdn.net/java0fu/article/details/106080397
  • 只要Socket类的InputStreamOutputStream有一个关闭,网络连接自动关闭(必须通过调用InputStreamOutputStream的 close方法关闭流,才能使网络可爱接自动关闭)。在程序退出时网络连接自动关闭。将Socket对象设为...
  • 解决方案: 需要使用INNODB,新一点的mysql版本都是支持INNODB数据引擎的,不需要特别的开启。特别是在5.5版本以后,默认就是InnoDB。这里发生问题就是我们的mysql版本有点老了,是5.1.47的版本, [[email ...
  • 包括WAS、WMQ在安装、巡检、监控、优化过程中的常见难点。安装1、was 负载均衡的机制的粘连性,was负载均衡异常?有一个case系统,部署在was集群环境,应用是集群环境,有的时候当一个节点异常的时,客户端访问该...
  • Bean named 'xxx' is expected to be of type 'xxx' but was actually of type 'com.sun.proxy.$Proxy19' 这个就是我的Service层 这个是我获取bean的代码,如果第二个参数是CourseService.class的话就没有什么...
  • callcalled的区别和用法

    千次阅读 2020-12-22 00:23:02
    匿名用户1级2018-11-06 回答1、calledcall都是同源单词,called可以看做是call的派生词,二者意思相近,形式和用法都不同,即called是call的过去式或过去分词形式。2、call的用法call既可用作动词,又可用作名词。...
  • 的性质差不多) 在之前安装了 Xdebug 但是只是把 xdebug.so rm 了的情况下, 直接 pecl install xdebug 会提示: pecl/xdebug is already installed and is the same as the released version 2.7.2 install failed ...
  • C++ ——"‘itoa’ was not declared in this scope" 错误解决方法 由于itoa()函数非ANSI C的标准,c++编程时要尽量避免使用使用snprintf()函数替换。 解决方法: // itoa(t,s,10);//使用snprintf函数替换 ...
  • 记录解决方法,卸载并重新安装 pip uninstall h5py pip install h5py 在使用pip时,遇到一个问题, ERROR: After October 2020 you may experience errors when installing or updating packages. This is ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,997
精华内容 95,598
关键字:

was和is的用法