http请求Content-Type,input框type为file可以通过accept限制文件类型,拖拽容器边框进行缩放思路,拖拽出现参考线自动吸附功能思路

77 阅读2分钟

1.关于http请求Content-Type的一些理解

*application/json:

axios默认的content-type是‘application/json;charset=UTF-8’
默认情况下,axios将JavaScript对象序列化为JSON

浏览器原生的form表单提交,是以‘application/x-www-form-urlencoded’方式传递数据
请求参数是以字符串的格式(类似get请求的QueryString格式)放在Form Data中
如果参数是对象,需要使用qs转换,或者使用new FormData

 JSON.stringfy()  和 qs.stringfy() 
  let  data = { name: 'edward', age: '25' }
  前者:JSON.stringfy(data)  //  ”{ 'name' : 'edward' , 'age' : '25' }”
  后者:qs.stringfy(data)  // 'name=edward&age=25'
  
  XMLHttpRequest Level 2添加了一个新的接口FormData。
利用FormData对象,我们可以通过js用一些键值对来模拟一系列表单控件,
使用XMLHttpRequest的send方法来异步的提交这个"表单",或者使用第三方库,比如fetch、axios
    var formData = new FormData();
    formData.append("username", "Groucho");
    formData.append("accountnum", 123456); 
    axios({
      method: 'POST',
      url:'/users'
      data: formData 
    })
    
使用Input上传文件,或者直接将文件流通过xhr提交后台接口
    一般不用额外设置请求头的Content-Type,浏览器会自动识别流文件
    参数请求格式:Content-Type: multipart/form-data;boundary=${boundary}
    ${boundary}是浏览器随机生成的字符串,用来分割参数,作用等同于 &

注意点:

  • 传统的HTTP请求时候,Content-Type默认为"文本"类型(text/plain
  • 传统的form提交的时候,Content-Type默认为"Form"类型(application/x-www-form-urlencoded)
  • axios传递字符串的时候,Content-Type默认为"Form"类型(application/x-www-form-urlencoded)
  • axios传递FormData格式数据时,Content-Type默认为"Form"类型(multipart/form-data; boundary=${boundary} )
  • axios传递对象的时候,Content-Type默认为"JSON"类型(application/json)

扩展,使用xhr传递流文件到后台服务

 var dataUrl = '流地址'
  var fileName = new Date().getTime() + '_' + Math.random() + '.jpg';// 以时间戳作为文件名
  var file = new File([dataUrl], fileName, { type: 'image/jpg' }); 
  var formData = new FormData();
  formData.append('file', file);

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) { // 接口响应完成
            if (xhr.status === 200) {
                  // 成功
                }
            } else {
                // 失败
            }
        }
    }

    xhr.open('POST', '/api/pictures/upload', true);
   // 注意请求头的Content-Type不用设置
   xhr.send(formData);

原文地址: www.cnblogs.com/caofeng11/p…

2.input框type为file可以通过accept限制文件类型

3.拖拽容器边框进行缩放思路

1.定位8个盒子在容器的四个点个四条边,通过计算鼠标移动距离,动态修改容器的left,top和width,height

4.拖拽出现参考线自动吸附功能思路

1.将画布中的组件的位置信息保存一份map,实时更新

2.拖拽组件时确定参考线出现的时机和位置

3.拖拽组件时确定参考线删除的时机

4.鼠标抬起时,确定拖拽组件保存的位置