springboot實現(xiàn)文件上傳步驟解析
這篇文章主要介紹了springboot實現(xiàn)文件上傳步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
第一步編寫上傳的前段頁面
<div> <button type="button" class="btn btn-primary" ng-click="openAddModal()" data-toggle="modal" data-target="#documentOprModal" style="margin-left: 10px;float:left"> 單個文件上傳 </button> </div> <!-- 點擊單個文件上傳彈出的模態(tài)框 --> <div class="modal fade" id="documentOprModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static" data-keyboard="false"> <div class="modal-dialog modal-lg" role="document" style="width: 600px;"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel"> 文檔入庫</h4> </div> <div class="modal-body"> <!--開發(fā)--> <form name="docForm" id="docForm"> <div class="form-group"> <label for="jhText">井號:</label> <input type="text" class="form-control" id="jhText" ng-model="document.jh"> </div> <!-- 作者 --> <div class="form-group"> <label for="authorText">作者:</label> <input type="text" class="form-control" id="authorText" ng-model="document.author"> </div> <!-- 單位 --> <div class="form-group"> <label for="unitText">單位:</label> <input type="text" class="form-control" id="unitText" ng-model="document.unit"> </div> <!-- 日期 --> <div class="form-group"> <label for="writeDate">寫作日期:</label> <input type="date" class="form-control" id="writeDate" ng-model="document.writeDate"> </div> <!-- 簡介 --> <div class="form-group"> <label for="introductionTextArea">簡介:</label> <textarea class="form-control" id="introductionTextArea" ng-model="document.introduction" rows="5" cols="60"></textarea> </div> <!-- 可能的查詢關(guān)鍵字 --> <div class="form-group"> <label for="keyPackageTextArea">可能的查詢關(guān)鍵字:</label> <textarea class="form-control" id="keyPackageTextArea" ng-model="document.keyPackage" rows="5" cols="60"></textarea> </div> <!-- 文件 --> <div class="form-group"> <div id="inputContent"> <input id="importFile" type="file" name="file" class="file-loading"> </div> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" ng-click="submitFileInfo()"> <i class="fa fa-check"></i>保存 </button> <button type="button" class="btn btn-default" data-dismiss="modal" style="margin: 0px 20px;"> <i class="fa fa-ban"></i>取消 </button> </div> </div> </div> </div>
第二步寫對應(yīng)的js頁面
/** * @Name:historyStorageCtrl,井史數(shù)據(jù)入庫 * @Date:2019-06-19 * @Author:huofenwei */ (function (angular) { 'use strict'; angular.module('Lujing').controller('historyStorageCtrl', ['$scope', '$http', 'ToastService', '$compile', '$timeout', 'HttpService','$filter', function ($scope, $http, ToastService, $compile, $timeout, HttpService,$filter) { $scope.fileInvalid = false; var $fileInput = initFileInput("importFile", '/server/search/upload'); /** *初始化文件上傳 */ function initFileInput(ctrlName, uploadUrl) { var control = $('#' + ctrlName); control.fileinput({ language: 'zh', uploadUrl: uploadUrl, //上傳的地址 allowedFileExtensions: ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'mp4', 'avi','wmv','asf','asx','rm','rmvb','3gp','mov','m4v','dat','mkv','flv','vob'], showUpload: true, //是否顯示上傳按鈕 showCaption: true, //是否顯示標(biāo)題 showPreview: false, //是否顯示預(yù)覽區(qū)域 browseClass: "btn btn-primary", //按鈕樣式 previewFileIcon: "<i class='glyphicon glyphicon-king'></i>", }).on('fileuploaderror', fileuploaderror).on("fileuploaded", function (event, data, previewId, index) { // console.log(data);.on('fileselect', fileselect) $scope.$apply(function () { $scope.fileId = data.response.fileId; // 未執(zhí)行 $scope.document.fileName = data.files[0].name; }); }).on("filecleared", function (event, data, msg) { $scope.$apply(function () { $scope.fileInvalid = false; }); }); return control; } /** * 清空輸入框 */ function importClearFunc() { if ($fileInput) $fileInput.fileinput('clear'); $scope.fileInvalid = false; } /** * 文件上傳錯誤 **/ function fileuploaderror(event, data, msg) { $scope.fileInvalid = true; $scope.$apply(); $('.modal-body .kv-upload-progress').css('display', 'none'); if (!(data.jqXHR.responseJSON)) { //文件類型驗證錯誤 $('#fileError').html(msg); } else { //上傳錯誤 console.log(data); var statusCode = data.jqXHR.responseJSON.message; var errorMsg = HTTP_ERROR_MAP['' + statusCode]; $('#fileError').html(errorMsg); } } /** * add 打開添加模態(tài)框 */ $scope.openAddModal = function () { $scope.document = {}; $scope.document.classificationId = 1; $scope.document.starGrade = 5; $timeout(importClearFunc); // openModeldialog(); }; /** * 表單驗證 * @returns {boolean} */ function formVlidate() { if (!$scope.document.introduction) { return false; } if (!$scope.document.keyPackage) { return false; } return true; } /** * 提交表單信息 */ $scope.submitFileInfo = function () { if (!$scope.fileId) { // ToastService.alert("提示", "先上傳文件,再提交表單", "info"); console.error("先上傳文件,再提交表單"); return; } if (!formVlidate()) { // ToastService.alert("提示", "請?zhí)畛浔韱?, "info"); console.error("請?zhí)畛浔韱?); return; } $scope.params = { 'introduction': $scope.document.introduction,//簡介 'keyPackage': $scope.document.keyPackage,//可能查詢的關(guān)鍵字 'starGrade': $scope.document.starGrade,//星級 'classificationId': $scope.document.classificationId,//文件的id 'filePath': $scope.fileId,//文件的路徑 'docName': $scope.document.fileName,//文件的名字 'author':$scope.document.author, 'unit':$scope.document.unit, 'writeDate':$scope.document.writeDate?$scope.document.writeDate.format("yyyy-MM-dd hh:mm:ss"):$scope.document.writeDate, 'jh': $scope.document.jh, 'id': $scope.document.id }; HttpService.post("/server/search/submit", $scope.params).then(function (data) { $('#documentOprModal').modal('hide'); // $("#contTable").bootstrapTable('refresh'); console.error("提交文件信息成功"); }, function (response) { // ToastService.alert("提示", "提交文件信息出錯", "warning"); console.error("提交文件信息出錯"); }); } } ]) })(angular);
第三部編寫后臺上傳文件和提交表單的代碼
package com.shiwen.yitihui.server.controller; import java.io.File; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.shiwen.yitihui.common.Snowflake; import com.shiwen.yitihui.domain.DocClassification; import com.shiwen.yitihui.domain.DocType; import com.shiwen.yitihui.domain.DocumentFile; import com.shiwen.yitihui.domain.FileEntity; import com.shiwen.yitihui.server.service.DocumentFileService; /** * @author wangjie: * @version 創(chuàng)建時間:2019年8月26日 上午11:54:22 * @Description 類描述: */ @RestController @RequestMapping("/search") public class UploadFileController { @Autowired private DocumentFileService dfservice; private String uploadPath="E://file"; /** * 上傳文件 * @param file * @return */ @PostMapping("/upload") public Map<String, Object> uploadFile(MultipartFile file){ Map<String, Object> map = new HashMap<String, Object>(); try { //文件的對象 FileEntity fEntity = new FileEntity(); String uuid = UUID.randomUUID().toString(); //文件的id fEntity.setId(uuid.replaceAll("-", ""));//String.valueOf(Snowflake.getNextKey())); //文件的名字 fEntity.setFileName(file.getOriginalFilename()); //上傳文件的時間 fEntity.setUploadTime(new Date()); //上傳者 fEntity.setUploadBy("admin"); //文件的后綴 String suffix = fEntity.getFileName().substring(fEntity.getFileName().indexOf(".")); //文件存放的完整路徑 fEntity.setFinePathName(uploadPath + File.separator + fEntity.getId() + suffix); //文件的類型 fEntity.setDocType(new DocType()); //設(shè)置文件的類型 fEntity.getDocType().setId(getDocTypeId(fEntity.getFileName())); //創(chuàng)建文件的對象 File newFile = new File(fEntity.getFinePathName()); //上傳文件 file.transferTo(newFile); map.put("result", "success"); map.put("fileId", fEntity.getId()); }catch(Exception e) { // e.printStackTrace(); map.put("result", "fail"); } return map; } /** * 提交表單 * @param df * @return */ @PostMapping("/submit") public Map<String, Object> submitFileInfo(@RequestBody DocumentFile df) { Map<String, Object> map = new HashMap<String, Object>(); try { if (df.getId() == null || df.getId().isEmpty() || df.getId() == "") { df.setId(String.valueOf(Snowflake.getNextKey())); } String suffix = df.getDocName().substring(df.getDocName().indexOf(".")); df.setFilePath(uploadPath + File.separator + df.getFilePath() + suffix); df.setUploadBy("admin");// 用戶名稱 df.setUploadTime(new java.util.Date()); df.setUploadTime(new Date()); df.setDownloadNumber(0L); df.setHeat(0L); df.setRelated(20); df.setDocType(new DocType()); df.getDocType().setId(getDocTypeId(suffix)); df.setClassification(new DocClassification()); df.getClassification().setId(df.getClassificationId()); dfservice.save(df); map.put("result", "success"); } catch (Exception e) { //e.printStackTrace(); map.put("result", "fail"); } return map; } private Integer getDocTypeId(String fileName) { if (fileName.contains(".doc")) { return 1; } else if (fileName.contains(".xls")) { return 2; } else if (fileName.contains(".pdf")) { return 3; } else if (fileName.contains(".ppt")) { return 4; }else { return 5; } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:java實現(xiàn)的順時針/逆時針打印矩陣操作示例
欄 目:Java
本文標(biāo)題:springboot實現(xiàn)文件上傳步驟解析
本文地址:http://mengdiqiu.com.cn/a1/Java/8929.html
您可能感興趣的文章
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
- 01-10Springboot中@Value的使用詳解
- 01-10利用Java實現(xiàn)復(fù)制Excel工作表功能
- 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
- 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
- 01-10java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間
- 01-10java實現(xiàn)的順時針/逆時針打印矩陣操作示例
- 01-10springboot jta atomikos實現(xiàn)分布式事物管理
- 01-10如何解決java壓縮文件亂碼問題
- 01-10Java后臺防止客戶端重復(fù)請求、提交表單實現(xiàn)原理


閱讀排行
本欄相關(guān)
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
- 01-10Springboot中@Value的使用詳解
- 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
- 01-10利用Java實現(xiàn)復(fù)制Excel工作表功能
- 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
- 01-10java基于poi導(dǎo)出excel透視表代碼實例
- 01-10java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間
- 01-10基于Java驗證jwt token代碼實例
- 01-10Java動態(tài)顯示當(dāng)前日期和時間
- 01-10淺談Java中真的只有值傳遞么
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實例總結(jié)
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什