<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
@PostMapping(value = "/upload") public String upload(@RequestParam("file") MultipartFile multipartFile) { return FileUploadUtil.upload(multipartFile); }
如果使用Springboot架構,直接使用MultipartFile工具即可,後端拿到MultipartFile物件之後,對其進一步處理就能拿到資料,或者存入資料庫,或者儲存到本地都可以。
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中根據名稱獲取到part物件,然後再轉換為流的形式,之後使用BufferedReader流讀取器,逐行讀取檔案內容並新增到字串構造器中,生成字串。
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-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="資料模型" 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>
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資料,然後將要匯入的code傳送到後端,返回哪些是已有的,然後在前端進行覆蓋或者暫不匯入的選擇,選擇完成之後點選確定,攜帶選擇的結果進行匯入
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() }) },
這兩天的專案中,學習了Java匯出資料,其中遇到坑及總結如下:
到此這篇關於Springboot與vue實現檔案匯入方法具體介紹的文章就介紹到這了,更多相關Springboot檔案匯入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45