最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot與vue實現(xiàn)文件導入方法具體介紹

 更新時間:2023年02月07日 15:12:04   作者:進擊的Coders  
文件導入時大多數(shù)項目無法回避的問題,這兩天深入學習了文件導入,在這里進行記錄,使用到的技術(shù)是Springboot+Vue,前端組件使用el-upload

一、Java后端使用MultipartFile

@PostMapping(value = "/upload")
    public String upload(@RequestParam("file") MultipartFile multipartFile) {
        return FileUploadUtil.upload(multipartFile);
    }

如果使用Springboot架構(gòu),直接使用MultipartFile工具即可,后端拿到MultipartFile對象之后,對其進一步處理就能拿到數(shù)據(jù),或者存入數(shù)據(jù)庫,或者保存到本地都可以。

二、Java后端直接從request中讀取并轉(zhuǎn)換為字符串

	Part importFile = request.getPart("file");
	InputStream inputstream = importFile.getInputStream();
	BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
	StringBuilder stringBuilder = new StringBuilder();
	String inputStr;
	while ((inputStr = streamReader.readLine()) != null) {
	    stringBuilder.append(inputStr);
	}
	String s = stringBuilder.toString();

直接從request中讀取需要使用Part類,從request中根據(jù)名稱獲取到part對象,然后再轉(zhuǎn)換為流的形式,之后使用BufferedReader流讀取器,逐行讀取文件內(nèi)容并添加到字符串構(gòu)造器中,生成字符串。

三、Java后端直接從request中讀取并存入本地文件

HttpServletRequest request = context.getRequest();
FileOutputStream fos = new FileOutputStream("C:\\Users\\Junhao\\Desktop\\import.json");
byte[] buffer = new byte[1024];
int len;
Part file = request.getPart("file");
InputStream inputstream = file.getInputStream();
while ((len = inputstream.read(buffer)) != -1){
    fos.write(buffer, 0, len);
}
fos.close();
inputstream.close();
String responseString = readInputStream(inputstream);
System.out.println(responseString);
BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
    stringBuilder.append(inputStr);
}
String s = stringBuilder.toString();
Object parse = JSON.parse(s);

四、前端使用el-upload

由于要求在上傳之前進行檢驗,然后根據(jù)檢驗的結(jié)果,對于沖突的實體,逐項選擇覆蓋已有實體,或者使用原來實體,這相對于單純的文件上傳,提高了難度

1.el-upload使用

   <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
      <el-upload
        ref="upload"
        :limit="1"
        accept=".json"
        :headers="upload.headers"
        :action="upload.url"
        :disabled="upload.isUploading"
        :on-progress="handleFileUploadProgress"
        :on-success="handleFileSuccess"
        :on-change="handleChange"
        :before-remove="handleRemove"
        :auto-upload="false"
        drag
        :data="upload.uploadData"
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">
          將文件拖到此處,或
          <em>點擊上傳</em>
        </div>
        <div class="el-upload__tip" style="color:red" slot="tip">提示:僅允許導入“json”格式文件!</div>
      </el-upload>
        <div v-if="showImportCheckRes" style="margin-top: 8px">
          <el-tabs active-name="thing">
              <el-tab-pane name="thing" label="事物" style="height: 130px;" class="scrollbar">
                <el-scrollbar style="height: 100%">
                  <el-form label-position="left">
                    <div v-for="item in importCheckRes.existThings">
                      <el-form-item :label="item.code" label-width="160px">
                        <el-radio-group v-model="item.value">
                          <el-radio :label="0">暫不導入</el-radio>
                          <el-radio :label="1">覆蓋</el-radio>
                        </el-radio-group>
                      </el-form-item>
                    </div>
                  </el-form>
                </el-scrollbar>
              </el-tab-pane>
              <el-tab-pane name="thingTemplate" label="事物模板" style="height: 130px;" class="scrollbar">
                <el-scrollbar style="height: 100%">
                  <el-form label-position="left">
                    <div v-for="item in importCheckRes.existThings">
                      <el-form-item :label="item.code" label-width="160px">
                        <el-radio-group v-model="item.value">
                          <el-radio :label="0">暫不導入</el-radio>
                          <el-radio :label="1">覆蓋</el-radio>
                        </el-radio-group>
                      </el-form-item>
                    </div>
                  </el-form>
                </el-scrollbar>
              </el-tab-pane>
            <el-tab-pane name="dataModel" label="數(shù)據(jù)模型" style="height: 130px;" class="scrollbar">
              <el-scrollbar style="height: 100%">
                <el-form label-position="left">
                  <div v-for="item in importCheckRes.existDataModels">
                    <el-form-item :label="item.code" label-width="160px">
                      <el-radio-group v-model="item.value">
                        <el-radio :label="0">暫不導入</el-radio>
                        <el-radio :label="1">覆蓋</el-radio>
                      </el-radio-group>
                    </el-form-item>
                  </div>
                </el-form>
              </el-scrollbar>
            </el-tab-pane>
            <el-tab-pane name="modelTag" label="模型標簽" style="height: 130px;" class="scrollbar">
              <el-scrollbar style="height: 100%">
                <el-form label-position="left">
                  <div v-for="item in importCheckRes.existModelTags">
                    <el-form-item :label="item.code" label-width="160px">
                      <el-radio-group v-model="item.value">
                        <el-radio :label="0">暫不導入</el-radio>
                        <el-radio :label="1">覆蓋</el-radio>
                      </el-radio-group>
                    </el-form-item>
                  </div>
                </el-form>
              </el-scrollbar>
            </el-tab-pane>
          </el-tabs>
        </div>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitImport" size="mini">確 定</el-button>
        <el-button @click="upload.open = false" size="mini">取 消</el-button>
      </div>
    </el-dialog>

2.on-change驗證文件內(nèi)容

    handleChange(file){
      if (this.importStatus === 1){
        return;
      }
      let that = this
      let raw = file.raw
      const reader = new FileReader()
      reader.readAsText(raw, 'UTF-8')
      reader.onload=async function(evt){
        let dataJson = JSON.parse(evt.target.result)
        const Entities = dataJson.Entities
        const entityCode = {}
        Object.keys(Entities).forEach(item=>{
          const tempArray = []
          Object.values(Entities[item])[0].forEach(i=>{
            tempArray.push(i.code)
          })
          that.$set(entityCode, item, JSON.parse(JSON.stringify(tempArray)))
        })
        that.$nextTick(()=>{
          importCheck(entityCode).then(res=>{
            that.importCheckRes = res.data
            that.showImportCheckRes = true
          })
        })
      }
    },

在前端先解析文件,讀取JSON數(shù)據(jù),然后將要導入的code發(fā)送到后端,返回哪些是已有的,然后在前端進行覆蓋或者暫不導入的選擇,選擇完成之后點擊確定,攜帶選擇的結(jié)果進行導入

    submitImport() {
      const tempJson = JSON.parse(JSON.stringify(this.importCheckRes))
      const importCheckRes = {}
      Object.keys(tempJson).forEach(item=>{
        const tempArray = []
        tempJson[item].forEach(i=>{
          if (i.value === 1){
            tempArray.push(i.code)
          }
        })
        this.$set(importCheckRes, item, tempArray);
      })
      this.$set(this.upload, 'uploadData', { importCheckRes: JSON.stringify(importCheckRes) })
      this.$nextTick(()=>{
        this.$refs.upload.submit()
      })
    },

3.效果截圖

總結(jié)

這兩天的項目中,學習了Java導出數(shù)據(jù),其中遇到坑及總結(jié)如下:

  • 導出時響應函數(shù)返回值必須為void。
  • 前端也需要進行處理,使用vue的this.download()即可。
  • 如果是普通的Springboot架構(gòu),導入可以直接使用MultipartFile。
  • 如果不能使用MultiPartFile,那么可以使用Part從request.getPart(“fileName”)的方式獲取part,然后進一步解析part獲取文件內(nèi)容。
  • 后端可以將讀取到的文件內(nèi)容轉(zhuǎn)換為字符串,使用BufferedRead和StringBuilder即可。
  • 前端可以讀取文件的內(nèi)容,使用FileReader和reader.onload()即可。
  • 如果如果單純驗證文件格式、大小或者名稱是否正確,來判斷是否終止文件上傳任務,那么建議使用before-upload(如果返回false,或者promise返回reject,文件上傳立即終止,并刪除剛添加的文件)。如果需要對提交內(nèi)容進行驗證,根據(jù)驗證結(jié)果做下一步操作,那么使用el-upload的on-change事件。

到此這篇關(guān)于Springboot與vue實現(xiàn)文件導入方法具體介紹的文章就介紹到這了,更多相關(guān)Springboot文件導入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java自定義類加載器及JVM自帶的類加載器之間的交互關(guān)系

    淺談Java自定義類加載器及JVM自帶的類加載器之間的交互關(guān)系

    這篇文章主要介紹了淺談Java自定義類加載器及JVM自帶的類加載器之間的交互關(guān)系,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot + validation 接口參數(shù)校驗的思路詳解

    SpringBoot + validation 接口參數(shù)校驗的思路詳解

    這篇文章主要介紹了SpringBoot + validation 接口參數(shù)校驗,本文通過項目實踐+場景分析給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot Maven打包失敗報:class lombok.javac.apt.LombokProcessor錯誤的解決辦法

    SpringBoot Maven打包失敗報:class lombok.javac.apt.Lombo

    最新項目部署的時候,出現(xiàn)了一個maven打包失敗的問題,報:class lombok.javac.apt.LombokProcessor錯誤,所以本文給大家介紹了如何解決SpringBoot Maven 打包失敗:class lombok.javac.apt.LombokProcessor 錯誤,需要的朋友可以參考下
    2023-12-12
  • springboot serverEndpoint導致@resource注解不生效

    springboot serverEndpoint導致@resource注解不生效

    在SpringBoot中,@Resource注解用于注入依賴,本文主要介紹了springboot serverEndpoint導致@resource注解不生效,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Java數(shù)組常用排序算法實例小結(jié)

    Java數(shù)組常用排序算法實例小結(jié)

    這篇文章主要介紹了Java數(shù)組常用排序算法,結(jié)合實例形式總結(jié)分析了java數(shù)組常用的4種排序算法,包括冒泡排序、數(shù)組遞增排序、快速排序及選擇排序,需要的朋友可以參考下
    2017-12-12
  • SpringBoot讀取外部配置文件的方法

    SpringBoot讀取外部配置文件的方法

    這篇文章主要介紹了SpringBoot讀取外部配置文件的方法,以端口配置為例,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 玩轉(zhuǎn)SpringBoot中的那些連接池(小結(jié))

    玩轉(zhuǎn)SpringBoot中的那些連接池(小結(jié))

    這篇文章主要介紹了玩轉(zhuǎn)SpringBoot中的那些連接池(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Springboot繼承Keycloak實現(xiàn)單點登錄與退出功能

    Springboot繼承Keycloak實現(xiàn)單點登錄與退出功能

    這篇文章主要介紹了Springboot繼承Keycloak實現(xiàn)單點登陸與退出,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • springboot如何根據(jù)不同的日志級別顯示不同的顏色

    springboot如何根據(jù)不同的日志級別顯示不同的顏色

    這篇文章主要介紹了springboot如何根據(jù)不同的日志級別顯示不同的顏色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • idea在plugins中搜不到插件的解決方法

    idea在plugins中搜不到插件的解決方法

    本文主要介紹了idea在plugins中搜不到插件的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06

最新評論

会东县| 瓮安县| 光泽县| 马尔康县| 华容县| 和平区| 太仆寺旗| 三台县| 南开区| 平泉县| 凌海市| 珲春市| 孟津县| 五华县| 峨眉山市| 泗洪县| 新乡市| 什邡市| 定陶县| 平阴县| 平昌县| 来宾市| 五常市| 广南县| 利辛县| 卓资县| 云南省| 北流市| 平潭县| 平罗县| 正阳县| 顺昌县| 秀山| 宁乡县| 马鞍山市| 家居| 沈丘县| 法库县| 资源县| 伊吾县| 偏关县|