java 文件上傳

来源:https://www.cnblogs.com/flyShare/archive/2020/03/15/12498064.html
-Advertisement-
Play Games

一、前端頁面 1、html (1)設置input 的type類型為file,代表 用於文件上傳。 (2)accept屬性,它規定能夠通過文件上傳進行提交的文件類型。accept值是 MIME 類型列表,多個類型之間用逗號隔開 (3)multiple 屬性是 HTML5 中的新屬性。屬性規定輸入欄位可 ...


一、前端頁面

1、html

 (1)設置input 的type類型為file,代表 用於文件上傳。

 (2)accept屬性,它規定能夠通過文件上傳進行提交的文件類型。accept值是 MIME 類型列表,多個類型之間用逗號隔開

(3)multiple 屬性是 HTML5 中的新屬性。屬性規定輸入欄位可選擇多個值。多文件上傳

<div >
<input id="addFile" class="form-control" class="filepath" type="file" multiple="multiple" accept="application/msword,application/vnd.ms-works,text/plain,application/pdf,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.wordprocessingml.document"><br>
</div>
2、js
add: function () {
    var file = document.getElementById("addFile").files[0];
    if (file == null) {
        toastr.error('請上傳文件');
        return false;
    }
    // 創建form對象
    var param = new FormData();
    // 通過append向form對象添加數據
    param.append('file', file);
    param.append('token', $('#token').val());
    // 上傳需要將對應的文件類型上傳的資料庫
    param.append('fileType', fileType);
    $.ajax({
        cache: false,
        type: "POST",
        url: backbasePath + '/apia/v1/file/uploadFile',
        data: param,
        async: true,
        contentType: false,
        processData: false,
        success: function (data) {
            data = eval("(" + data + ")");
            if ('000000' == data.code) {
                toastr.success(data.msg);
                //上傳成功之後清楚掉之前選擇的文件
                $("#addFile").val("");
                // 上傳成功之後進行table的重新載入
                $('#filesList').DataTable().ajax.reload();
            } else if ('900000' == data.code) {
                toastr.error('上傳失敗!');
            } else {
                toastr.error(data.msg);
            }
            $("#upload").modal('hide');
        },
        error: function () {
            toastr.error('上傳失敗!');
            $("#upload").modal('hide');
        }
    });
},
二、後端代碼
    // 上傳文件
    @RequestMapping("/uploadFile")
    public Object upload(HttpServletRequest request, @RequestParam(required = false) MultipartFile file) {
        String result = null;if (null != file && !file.isEmpty()) {
            try {
                // 檢查文件大小
                long fileSize = file.getSize();
                if (fileSize > 1 * 1024 * 1024) {
                    return RequestResponseTool.getJsonMessage(RespCode.repeat, "上傳失敗!上傳的文件大小超出了1M限制!");
                }
                // 檢查文件MIME類型
                String contentType = file.getContentType();
                List<String> types = new ArrayList<String>();
                //擴展名 doc dot
                types.add("application/msword");
                //擴展名 docx
                types.add("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
                //擴展名 pdf
                types.add("application/pdf");
                //擴展名 txt
                types.add("text/plain");
                //擴展名 wps
                types.add("application/vnd.ms-works");
                //擴展名 xla xlc xlm xls xlt xlw
                types.add("application/vnd.ms-excel");
                if (!types.contains(contentType)) {
                    return RequestResponseTool.getJsonMessage(RespCode.repeat, "上傳失敗!不允許上傳此類型的文件!");
                }
                // 獲取原始文件名
                String originalFilename = file.getOriginalFilename();
                String path = filePath;
                path = path + "/upload/";//定義位絕對路徑
                File parent = new File(new File(path).getAbsolutePath());
                System.out.println("\tparent=" + parent);
                if (!parent.exists()) {
                    parent.mkdirs();
                }
                Date date = new Date();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                Map<String, Object> m = new HashMap<String, Object>();
                // 根據文件名稱進行查詢,如果存在則更新否則新增
                Map<String, Object>  fileMap = knowledgeService.getFileByName(originalFilename);
                // 如果能查詢出對應的數據,則進行更新操作
                if(fileMap !=null && fileMap.size() >0){
                    String id =fileMap.get("id").toString();
                    String oldfileName =fileMap.get("file_name").toString();
                    // 找到之前的文件,如果存在則刪除
                    File oldFile = new File( path+"/"+oldfileName);
                    if (oldFile.exists()) {
                        oldFile.delete();
                    }
                    // 保存當前的文件
                    file.transferTo(new File(parent, oldfileName));
                    // 更新文件表中的大小
                    m.put("id", id);
                    m.put("file_size", fileSize);
                    result = knowledgeService.update(m);
                }
                // 如果查不到數據,則進行新增操作
                else {
                    // 新文件名稱
                    String filename = UUID.randomUUID().toString();
                    String suffix = "";
                    int beginIndex = originalFilename.lastIndexOf(".");
                    if (beginIndex != -1) {
                        suffix = originalFilename.substring(beginIndex);
                    }
                    // 執行保存文件
                    file.transferTo(new File(parent, filename + suffix));
                    // 存放的文件路徑
                    String file_path = "/upload/" + filename + suffix;
                    //id
                    String knowledgeId = IDCode.knowledgeId + IDTool.getWebUserId() + "";
                    //文件表Id
                    String file_id = IDCode.fileId + IDTool.getWebUserId() + "";
                    //文件邏輯名稱(和路徑中的名稱保持一致)
                    String file_name = filename + suffix;
                    //  知識資源表中的主鍵
                    m.put("id", knowledgeId);// 文件id
                    m.put("file_id", file_id);// 創建時間
                    m.put("create_time", dateFormat.format(date));
                    m.put("file_name", file_name);
                    m.put("file_real_name", originalFilename);
                    m.put("file_path", file_path);
                    m.put("file_size", fileSize);
            // 執行新增操作 result
= knowledgeService.add(m); } return result; } catch (Exception ex) { ex.printStackTrace(); } } return result; }

 




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • BOM解讀 BOM概念 - browser object model:瀏覽器對象模型 bom相當於提供了一套操作瀏覽器的方法。(windw是頂級對象) BOM的操作方法:(這裡只列舉比較常用) navigator: (包含有瀏覽器的信息) //以前用來相容,目前沒多大用處,瞭解即可 appName ...
  • DOM解讀 DOM概念 - document object model:文檔對象模型 操作文檔的一套方法,document是一個對象,是dom的頂級對象,屬於window的一個對象,並且可以說是最出色的一個兒子。 DOM元素的獲取: document.getElementById("id名字") / ...
  • 通過對touch的基礎事件的封裝,可以完成高級事件 hammer.js http://hammerjs.github.io/ 方便使用移動端高級事件 (而且相容性很好) 中文文檔 https://www.cnblogs.com/qianduanjingying/p/5812139.html swip ...
  • export 與 import的複合寫法 模塊的繼承 跨模塊常量 ...
  • 移動端事件有哪些: 觸摸事件 手勢事件 感測器事件 (後面兩個相容性不怎麼樣,因此重點就是觸摸事件) 觸摸事件: touch 事件 pointer 事件 (PC端可能會使用jQuery做動畫,移動端一般不會,基本都是使用css3做動畫) ontouchstart (必須在元素內部才能觸發) onto ...
  • 使用場景 主要抽離組件共用的代碼,如各個頁面中分頁組件的data、methods,和ui原型中統一的confirm和alert彈窗 以及載入的進度條等 混合器: // mixin.js export const page = { data() { return { pageSize:20, curr ...
  • JavaScript雙重迴圈的嵌套之逆戰班系列 迴圈嵌套 迴圈的嵌套就是一個迴圈體內又包含另一個完整的迴圈結構。如圖: 它的執行順序為由外到內,外層迴圈執行一次,內層迴圈將完整的執行一次。外層迴圈內的迴圈體執行完後,返回外層迴圈繼續執行,直到外層迴圈結束。 運用:使用迴圈嵌套輸出正反金字塔代碼圖: ...
  • 移動端適配與響應式佈局的區別 簡單適配原理: px自動轉rem的方法: 1、sass less等 2、工程化手段 3、sublime安裝插件 下載cssrem插件壓縮包 https://github.com/flashlizi/cssrem sublime-首選項-瀏覽插件,打開插件目錄packag ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...