html 5 模仿 form 提交file 文件之FormData

使用xhtr 2 可以实现前端提交 无刷新提交form表单

api 参考mdn : https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/%E5%88%A0%E9%99%A4

文章参考 http://blog.csdn.net/u014607184/article/details/52372551#comments

使用ajax 请求时 注意
       $.ajax({
          url : this.baseUrl+'updateHead',
          type : 'POST',
          data : formData,
          /**
           * 必须false才会避开jQuery对 formdata 的默认处理
           * XMLHttpRequest会对 formdata 进行正确的处理
           */
          processData : false,
          /**
           *必须false才会自动加上正确的Content-Type
           */
          contentType : false,
          success : function(responseStr) {
            alert("成功:" + JSON.stringify(responseStr));
          },
          error : function(responseStr) {
            alert("失败:" + JSON.stringify(responseStr));
          }
        });
form的处理比较简单  || 在这采用append方法, 不知道为什么 传入form 表单进行构造 fomrData 数据获取不到
        let f = $('#imgForm')[0];
        let formData = new FormData();
        formData.append("file", $("#uploadCom")[0].files[0]);
        formData.append('_token',this.token);
        console.log(formData);
        this.uploadHeader(formData);
最终form 提交的格式如下

这里写图片描述

此时contentType 已变为 mul..

    当然前端进行图片上传时,还可以使用html5 的fileReader api进行上传.依旧是监听Input窗的change 事件
   fileChange(e){
        var files = e.target.files || e.dataTransfer.files
        if (!files.length) return
        this.createImage(files)
      },
      createImage (file) {
        var vm = this
        var reader = null
        var leng = file.length
        for (var i = 0; i < leng; i++) {
          reader = new window.FileReader()
          //todo:// 二进制 与 base64 都可以实现
          reader.readAsBinaryString(file[i])
          reader.onload = (e) => {
            vm.images.push(e.target.result)
            this.uploadImgToServer(vm.images[0])
            window.vm = vm;
          }
        }
      },
    //点击其他按钮时触发  input 的click 事件  input 窗口默认隐藏
        uploadHeadImg(){
        //todo:// 触发file的点击事件
        document.getElementById('uploadCom').click();
      },
    //最后一步 将图片上传到服务器
      uploadImgToServer(imgData){
        this.$http.post(`${this.baseUrl}updateHead`,
          {
            imgData
          }
        ).then((res) => {
          alert('上传头像成功');
        }, () => {

        });
      },
关于ReadApi 的使用可以参考我上篇文章,建议去看mdn
要创建一个模仿百度植物识别功能的前端代码,我们可以使用JavaScript库(如`html5`、`axios`)配合一个视觉识别API来实现图片上传并获取结果。这里是一个简单的HTML和JavaScript示例: ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>植物识别</title> </head> <body> <input type="file" id="imageSelect" accept="image/*" capture> <button onclick="uploadImage()">上传图片识别</button> <div id="result"></div> <script> const apiKey = "your_api_key"; // 百度AI API key (实际需要替换为你的) const apiUrl = "https://aip.baidubce.com/rest/2/image-classify/v1/classify"; function uploadImage() { const fileInput = document.getElementById('imageSelect'); if (!fileInput.files.length) return; const file = fileInput.files[0]; const formData = new FormData(); formData.append("image", file); axios.post(apiUrl, formData, { headers: { 'Content-Type': 'multipart/form-data', 'Authorization': `Bearer ${apiKey}` } }).then(response => { const result = response.data.result; displayResult(result); }).catch(error => { console.error("上传失败:", error); document.getElementById('result').innerText = "上传错误"; }); } function displayResult(result) { let plantName = ""; for (const item of result) { plantName += `${item.label}: ${item.probability.toFixed(2)}%\n`; } document.getElementById('result').innerText = `识别到的植物: \n${plantName}`; } </script> </body> </html> ``` 请注意,这个示例假设你已经有了百度AI的图像识别服务(比如`image-classify`)API密钥。在实际应用中,你需要将`apiKey`替换为你从百度云平台获得的实际API密钥,并确保遵守其使用规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值