为什么拖拽上传文件在axios上传那步没法获取上传的文件?

发布于 2022-09-13 01:01:59 字数 3053 浏览 13 评论 0

image.png
image.png
输出的分别是下面几个log出来的值,我这个文件一直上传不上去。话说后台让我加的boundary有什么作用吗?

<!-- 拖拽区域 -->
            <div class="index-drag"
                id="updataDrag"
                @dragover="updataDragover" 
                @dragenter="updataDragenter"
                @dragleave="updataDragleave"
                @drop="updateDrop">
                <div class="index-drag-iconBox">
                    <span class="el-icon-upload"></span>
                </div>
                <div class="index-drag-message">
                    <span class="index-drag-message-titles">将文件拖动到此处,或</span>
                    <label for="file" class="index-drag-message-label">
                      <!-- <form name="forms" action="http://192.168.1.170:8889/mtcPlan/mtcPlanCheck" method="post" enctype="multipart/form-data"> -->
                        <input class="index-drag-message-input" type="file" multiple='multiple' accept=".xlsx,.xls" id="file" name="file" @change="manualChange" />
                        <span class="index-drag-message-manual">点击上传</span>
                      <!-- </form> -->
                    </label>
                </div>
            </div>

 const submitUpdata = async (file:any) => {            
      state.networkName = null;
     
      console.log(file,typeof(file));
      let fileData = new window.FormData();
        fileData.append("file", file);
        fileData.append("filename", file.name);
        console.log(fileData.get('file'));
      let token = localStorage.getItem('userInfo');
      axios({
          method: 'post',
          url: 'http://192.168.1.170:8889/mtcPlan/mtcPlanCheck',
          headers: {
              'Content-Type': 'multipart/form-data',
              'Authorization': token
          },        
          data: fileData,
          onUploadProgress: function(progress:any){
            // console.log(typeof(progress))
            // 上传处理进度事件                    
            let network = parseInt(`${progress.loaded/progress.total * 100}`,10)
            state.network = network
            if(progress.loaded == progress.total){
              state.networkName = 'success';
              setTimeout(()=>{
                viselble.value = false;  
              },800);                         
            }else{
              state.networkName = null
            }
          },
          onDownloadProgress:function(progress:any){
              // 为下载处理进度事件
          }
      })
      .then(res => {
        console.log(res);
        
        // 具体状态码 自行判断 这里用别人的 状态码是 201 哈哈 真实提交不成功哈  
        if(res.status >= 200 && res.status <= 206){
          state.networkName = 'success'
        }
        if(res.status >= 400){
          state.networkName = 'exception'
        }
      })
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青芜 2022-09-20 01:01:59

你这个是 FormData 的接口吗?那你上传的方式不对。

后端说加 boundary 是对的,但你不要自己在 JS 里拼。

你应该把 headers 去掉,然后 data 那里直接赋值成那个 FormData 对象:

axios({
    method: 'post',
    url: 'http://192.168.1.00:8889/mtcPlan/mtcPlanCheck',
    data: fileData
});

另外你 axios 也别有什么全局拦截器里有骚操作强制改变 Content-Type 啥的。


补充一个例子,见图:

image.png

P.S. 可能是上传后被思否压缩了,单独传两张:
image.png
image.png

你可以看到 FormData 的 boundary 是浏览器自动加的,不应该你手动加。你手动加会干扰下面 Payload 部分。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文