亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

前端使用vue點(diǎn)擊上傳文件傳送給后端并進(jìn)行文件接收的方法

 更新時(shí)間:2025年01月15日 08:33:34   作者:似璟如你  
這篇文章主要介紹了如何在前端和后端實(shí)現(xiàn)文件傳輸,前端使用Vue.js發(fā)送文件,后端使用Java接收文件并處理,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、效果圖

前端頁面:

在java這邊后端的target文件就可以接收到前端發(fā)送的文件,文件可以打開

接下來看具體代碼是怎么實(shí)現(xiàn)的!

二、代碼部分

Vue代碼

<template>  
  <el-upload  
    ref="upload"  
    class="upload-demo"  
    action="http://localhost:9090/api/upload"  <!--這個(gè)為后端響應(yīng)的路徑-->
    :on-success="handleSuccess"  
    :before-upload="beforeUpload"  
    :file-list="fileList"  
    :auto-upload="false"  
    :on-change="handleChange"  
  >  
    <el-button slot="trigger" size="small" type="primary">選取文件</el-button>  
    <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上傳到服務(wù)器</el-button>  
    <div slot="tip" class="el-upload__tip">只能上傳xlsx/xls文件,且不超過500kb</div>  
  </el-upload>  
</template>  
  
<script>  
export default {  
  // ... 其他代碼保持不變  
  data() {  
    return {  
      fileList: []  
    };  
  },  
  methods: {  
    handleSuccess(response, file, fileList) {  
      console.log('文件上傳成功:', response);  
    },  
    beforeUpload(file) {  
      // 限制格式為excel
      // 如果不想限制可以將這行代碼去掉,以及后面的一些關(guān)于excel的判斷
      const isExcel = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type === 'application/vnd.ms-excel';  
      // 限制文件大小
      const isLt2M = file.size / 1024 / 1024 < 0.5;  

      if (!isExcel) {  
        this.$message.error('上傳文件只能是 xls/xlsx 格式!');  
      }  

      if (!isLt2M) {  
        this.$message.error('上傳文件大小不能超過 500KB!');  
      }  
      return isExcel && isLt2M;  
    },  
    submitUpload() {  
      // 這邊的$refs.upload要與上面第三行的ref一致
      this.$refs.upload.submit();  
    },  
    handleRemove(file, fileList) {  
      console.log('移除文件', file, fileList);  
    },  
    handleChange(file, fileList) {  
      this.fileList = fileList;  
    }  
  }    
};  
</script>

后端代碼

(1)首先導(dǎo)入依賴

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.8.0</version>
    </dependency>

(2)controller層(也可以在servlet寫)

@RequestMapping(value = "/upload")
    public void handleFileUpload(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException{
        // 檢查請求是否為多部分請求
        if (!ServletFileUpload.isMultipartContent(request)) {
            throw new ServletException("Content type is not multipart/form-data");
        }

        // 配置上傳參數(shù)
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            // 解析請求的內(nèi)容提取文件數(shù)據(jù)
            List<FileItem> formItems = upload.parseRequest(request);

            if (formItems != null && formItems.size() > 0) {
                // 迭代表單數(shù)據(jù)
                for (FileItem item : formItems) {
                    // 處理不在表單中的字段
                    if (!item.isFormField()) {
                        String fileName = new File(item.getName()).getName();
                        //下面的路徑就是你要映射到target的路徑
                        String filePath = request.getServletContext().getRealPath("/") + "WEB-INF"+File.separator+"static" + File.separator + fileName;
                        File storeFile = new File(filePath);

                        // 在控制臺輸出文件的上傳路徑
                        System.out.println(filePath);
                        System.out.println("編碼前的原文: " + fileName);
                        //這一條在控制臺打印可能會出現(xiàn)字符編碼的問題,如浣撴浜哄憳淇℃伅.xlsx
                        //這種是gbk編碼,接下來就將gbk解碼為utf-8
                        byte[] gbkBytes = fileName.getBytes("gbk");
                        for (byte b : gbkBytes) {
                            System.out.print(Integer.toHexString(b & 0xff) + ",");
                        }
                        String gbkToUtf8 = new String(gbkBytes, "utf8");
                        System.out.println("gbk編碼,utf8解碼后的文字: " + gbkToUtf8 + "\n" + "----------------------");
                       

                        // 保存文件到硬盤
                        item.write(storeFile);
                        request.setAttribute("message", "文件上傳成功!");
                    }
                }
            }
        } catch (Exception ex) {
            request.setAttribute("message", "文件上傳失敗!");
        }
    }

這樣子字符編碼就不會出現(xiàn)亂碼 

這樣子寫就可以實(shí)現(xiàn)上面的那種效果啦

總結(jié)

到此這篇關(guān)于前端使用vue點(diǎn)擊上傳文件傳送給后端并進(jìn)行文件接收的文章就介紹到這了,更多相關(guān)前端vue點(diǎn)擊上傳文件傳給后端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 編寫 Vue v-for 循環(huán)的 7 種方式

    編寫 Vue v-for 循環(huán)的 7 種方式

    這篇文章主要分享可編寫 Vue v-for 循環(huán)的 7 種方式,在Vue中,基本上每個(gè)項(xiàng)目都會用到v-for循環(huán)。它們允許你在模板代碼中編寫for循環(huán),接下來一起看看下面文章的詳細(xì)介紹吧

    2021-12-12
  • 解決vue+elementui項(xiàng)目打包后樣式變化問題

    解決vue+elementui項(xiàng)目打包后樣式變化問題

    這篇文章主要介紹了解決vue+elementui項(xiàng)目打包后樣式變化問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue.js路由跳轉(zhuǎn)詳解

    vue.js路由跳轉(zhuǎn)詳解

    這篇文章主要為大家詳細(xì)介紹了vue.js路由跳轉(zhuǎn)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • vue2中的el-select組件數(shù)據(jù)太多,如何實(shí)現(xiàn)滾動(dòng)加載數(shù)據(jù)效果

    vue2中的el-select組件數(shù)據(jù)太多,如何實(shí)現(xiàn)滾動(dòng)加載數(shù)據(jù)效果

    這篇文章主要介紹了vue2中的el-select組件數(shù)據(jù)太多,如何實(shí)現(xiàn)滾動(dòng)加載數(shù)據(jù)效果,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 在vue中使用Echarts利用watch做動(dòng)態(tài)數(shù)據(jù)渲染操作

    在vue中使用Echarts利用watch做動(dòng)態(tài)數(shù)據(jù)渲染操作

    這篇文章主要介紹了在vue中使用Echarts利用watch做動(dòng)態(tài)數(shù)據(jù)渲染操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • VUE 使用中踩過的坑

    VUE 使用中踩過的坑

    本篇是我對vue使用過程中以及對一些社區(qū)朋友提問我的問題中做的一些總結(jié),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-02-02
  • 基于Vue3+TypeScript的全局對象的注入和使用詳解

    基于Vue3+TypeScript的全局對象的注入和使用詳解

    這篇文章主要介紹了基于Vue3+TypeScript的全局對象的注入和使用,本篇隨筆主要介紹一下基于Vue3+TypeScript的全局對象的注入和使用,需要的朋友可以參考下
    2022-09-09
  • vue路由的配置和頁面切換詳解

    vue路由的配置和頁面切換詳解

    這篇文章主要給大家介紹了關(guān)于vue路由的配置和頁面切換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • vue修改打包配置如何實(shí)現(xiàn)代碼打包后的自定義命名

    vue修改打包配置如何實(shí)現(xiàn)代碼打包后的自定義命名

    這篇文章主要介紹了vue修改打包配置如何實(shí)現(xiàn)代碼打包后的自定義命名,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 解決VUEX的mapState/...mapState等取值問題

    解決VUEX的mapState/...mapState等取值問題

    這篇文章主要介紹了解決VUEX的mapState/...mapState等取值問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評論