ajax通过FormData上传文件

<input type="file" id="uploadKnowledge" name="upload_knowledge">

js代码

// 可以临时显示
$("#uploadKnowledge").change(function (e) {
    const file = e.target.files[0];
    $("#uploadReady").html(file.name).attr("href", URL.createObjectURL(file));
});
// 点击提交
$("button").click(function (event) {
    let file = $("#uploadKnowledge")[0].files[0];
    let formData = new FormData();
    formData.append('id', '123'); // post数据
    formData.append('name',file.name);
    formData.append('upload_knowledge', file); // 字段名 'upload_knowledge' 后端php用$_FILE接收
    $.ajax({
    url: '/source-video-knowledge/save-data',
    type: 'POST',
    data: formData,
    processData: false,            // 必须设为 false
    contentType: false,            // 必须设为 false
    xhr: function() {
      const xhr = new window.XMLHttpRequest();
      // 可选:监听上传进度
      xhr.upload.addEventListener("progress", function(evt) {
        if (evt.lengthComputable) {
          const percentComplete = evt.loaded / evt.total * 100;
          // console.log('上传进度:', Math.round(percentComplete) + '%');
        }
      }, false);
      return xhr;
    },
    success: function (res) {
      if (res.code === 200) {
                        
      } else {
        console.log(res);
      }
    },
    error: function(err) {
      console.error('上传失败:', err);
      layer.msg('上传失败,请重试');
    },
    complete: function () {
      layer.close(layerLoading);
    }
    });
});

后端php可以同时接收post数据和file数据

posted @ 2025-12-30 16:32  龍飛鳯舞  阅读(0)  评论(0)    收藏  举报