springboot實現多文件上傳

springboot實現多文件上傳

代碼

package com.sh.system.controller;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
import java.util.UUID;@RestController
@RequestMapping("/filesUpload")
public class FileUploadController {// 文件存儲路徑(可以根據需要修改)private static String UPLOADED_FOLDER = "uploads/";/*** 單文件上傳*/@PostMapping("/file")public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return new ResponseEntity<>("Please select a file to upload.", HttpStatus.BAD_REQUEST);}try {// 獲取文件名并添加唯一后綴防止重名String fileName = StringUtils.cleanPath(file.getOriginalFilename());String uniqueFileName = UUID.randomUUID().toString() + "_" + fileName;// 創建文件存儲路徑Path filePath = Paths.get(UPLOADED_FOLDER).toAbsolutePath().normalize();Files.createDirectories(filePath);// 保存文件到指定路徑Path targetLocation = filePath.resolve(uniqueFileName);Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);return ResponseEntity.ok("File uploaded successfully: " + uniqueFileName);} catch (IOException ex) {return new ResponseEntity<>("Could not upload the file!", HttpStatus.INTERNAL_SERVER_ERROR);}}/*** 多文件上傳** */@PostMapping("/files")public ResponseEntity<String> uploadFiles(@RequestParam("files") List<MultipartFile> files) {if (files.isEmpty()) {return new ResponseEntity<>("Please select files to upload.", HttpStatus.BAD_REQUEST);}try {for (MultipartFile file : files) {// 獲取文件名String fileName = StringUtils.cleanPath(file.getOriginalFilename());// 如果文件名為空或只包含空白字符,則生成一個唯一的文件名if (fileName.contains("..") || fileName.isEmpty()) {fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();}// 構建文件路徑Path filePath = Paths.get(UPLOADED_FOLDER + fileName);// 確保上傳目錄存在Files.createDirectories(filePath.getParent());// 保存文件到指定路徑Files.copy(file.getInputStream(), filePath, java.nio.file.StandardCopyOption.REPLACE_EXISTING);}return new ResponseEntity<>("Files uploaded successfully!", HttpStatus.OK);} catch (IOException e) {e.printStackTrace();return new ResponseEntity<>("Failed to upload files.", HttpStatus.INTERNAL_SERVER_ERROR);}}
}

postman操作截圖
1、設置header
在這里插入圖片描述
2、設置Body(說明:圖示為多文件測試,單個文件,只需要設置一個key,value即可)
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70640.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java所有運算符理解

Java 運算符 算術運算符 表格中的實例假設整數變量A的值為10&#xff0c;變量B的值為20&#xff1a; 操作符描述例子加法 - 相加運算符兩側的值A B 等于 30-減法 - 左操作數減去右操作數A – B 等于 -10*乘法 - 相乘操作符兩側的值A * B等于200/除法 - 左操作數除以右操作數…

紛析云:賦能企業財務數字化轉型的開源解決方案

在企業數字化轉型的浪潮中&#xff0c;財務管理的高效與安全成為關鍵。紛析云憑借其開源、安全、靈活的財務軟件解決方案&#xff0c;為企業提供了一條理想的轉型路徑。 一、開源的力量&#xff1a;自主、安全、高效 紛析云的核心優勢在于其100%開源的財務軟件源碼。這意味著…

Golang深度學習

前言 在2009年&#xff0c;Google公司發布了一種新的編程語言&#xff0c;名為Go&#xff08;或稱為Golang&#xff09;&#xff0c;旨在提高編程效率、簡化并發編程&#xff0c;并提供強大的標準庫支持。Go語言的設計者們希望通過Go語言能夠解決軟件開發中的一些長期存在的問…

博客系統筆記總結 2( Linux 相關)

Linux 基本使用和程序部署 基本命令 文件操作 顯示當前目錄下的文件 ls&#xff1a;顯示當前目錄下的文件 ll&#xff1a;以列表的形式展示&#xff0c;包括隱藏文件 進入目錄 && 顯示當前路徑 cd&#xff1a;進入目錄&#xff08;后面跟相對路徑或者絕對路徑&…

開源基準測試模擬器:BlueROV2 水下機器人的控制

拜讀An Open-Source Benchmark Simulator: Control of a BlueROV2 Underwater Robot 非常感謝Esben Uth的幫助。 本文介紹了在 Simulink? 中實現的常用且低成本的遙控潛水器 &#xff08;ROV&#xff09; BlueROV2 的仿真模型環境&#xff0c;該環境已針對水下航行器的基準控…

Unity打包APK報錯 using a newer Android Gradle plugin to use compileSdk = 35

Unity打包APK報錯 using a newer Android Gradle plugin to use compileSdk 35 三個報錯信息如下 第一個 WARNING:We recommend using a newer Android Gradle plugin to use compileSdk 35This Android Gradle plugin (7.1.2) was tested up to compileSdk 32This warning…

HTML5特殊字符

HTML中常用的特殊符號一般都以“&”開頭&#xff0c;以“;”結束。

本地大模型編程實戰(23)用智能體(Agent)實現基于SQL數據構建問答系統(2)

本文將用 智能體(Agent) 實現對 SQLite 數據庫的查詢&#xff1a;用戶用自然語言提出問題&#xff0c;智能體也用自然語言根據數據庫的查詢結果回答問題。 本次將分別在英文、中文環境下&#xff0c;使用 qwen2.5 、 MFDoom/deepseek-r1-tool-calling:7b 以及 llama3.1 做實驗。…

nodejs npm install、npm run dev運行的坎坷之路

1、前面的種種都不說了&#xff0c;好不容易運行起來oap-portal項目&#xff0c;運行idm-ui項目死活運行不起來&#xff0c;各種報錯&#xff0c;各種安裝&#xff0c;各種卸載nodejs&#xff0c;卸載nvm&#xff0c;重裝&#xff0c;都不好使。 2、甚至后來運行npm install會…

gotool在線工具集

1. 包含各種 sql 處理 2. 包含 json 處理 3. 包含 圖片處理 4. 跨平臺傳輸 gotool

猿大師播放器:智慧交通Web網頁低延遲播放監控RTSP H.265視頻解決方案

在智慧城市建設加速推進的今天&#xff0c;智慧交通作為城市"神經系統"正面臨前所未有的發展機遇。據統計&#xff0c;2023年全國交通視頻監控設備保有量已突破4500萬臺&#xff0c;日均產生的視頻數據量超50PB。但在這些龐大數字背后&#xff0c;行業卻普遍面臨著&q…

Web自動化之Selenium控制已經打開的瀏覽器(Chrome,Edge)

在使用selenium進行web自動化或爬蟲的時候,經常會面臨登錄的情況,對于這種情況,我們可以利用Selenium控制已經打開的瀏覽器&#xff0c;從而避免每次都需要重新打開瀏覽器并進行登錄的繁瑣步驟。 目錄 說明 啟動瀏覽器 注意 --user-data-dir說明 代碼設定 代碼 改進代…

【Alertmanager】Alertmanager告警路由,告警靜默,告警抑制,高可用的實現

?? 歡迎大家來到景天科技苑?? ???? 養成好習慣,先贊后看哦~???? ?? 作者簡介:景天科技苑 ??《頭銜》:大廠架構師,華為云開發者社區專家博主,阿里云開發者社區專家博主,CSDN全棧領域優質創作者,掘金優秀博主,51CTO博客專家等。 ??《博客》:Python全…

Vue3 + Vite + TS,使用 配置項目別名屬性:resolve

使用 resolve 配置全局項目路徑別名 1.優化了開發中單頁面引用其他模塊的路徑復雜性 2.妥妥解決了&#xff0c;組件復用當中提高開發效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根據開發者需求任意定義&#xff0c;較多 import { useStore…

Linux主機用戶登陸安全配置

Linux主機用戶登陸安全配置 在Linux主機上進行用戶登錄安全配置是一個重要的安全措施&#xff0c;可以防止未經授權的訪問。以下是如何創建用戶hbu、賦予其sudo權限&#xff0c;以及禁止root用戶SSH登錄&#xff0c;以及通過ssh key管理主機用戶登陸。 創建用戶hbu 使用具有…

基于 SpringBoot Vue 的生鮮商城系統設計和實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

設計模式-結構性模式

結構型模式主要關注類或對象的組合&#xff0c;旨在通過識別簡單的結構關系來設計更復雜的結構。以下是幾種常見的結構型設計模式&#xff1a; 1. 適配器模式&#xff08;Adapter Pattern&#xff09; 將一個類的接口轉換成客戶端所期望的另一個接口&#xff0c;使得原本由于接…

VantUI官網更新2025,移動端前端開發

Vant 2 - Mobile UI Components built on Vue https://vant-ui.github.io/vant/v2/#/zh-CN/quickstart Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. https://vant-ui.github.io/vant/#/zh-CN Vant Weapp - 輕量、可靠的小程序 UI 組件庫,微…

《我的AUTOSAR之路》Det 解析

Det 解析 1. 引言和功能概述2. Errors2.1 開發錯誤(Development Errors)2.2 運行時錯誤(Runtime Errors)2.3 臨時故障(Transient Faults)3 錯誤查詢默認錯誤追蹤器(Default Error Tracer,DET) 1. 引言和功能概述 默認錯誤追蹤器(DET):該規范描述了默認錯誤追蹤器(…

電腦連接示波器顯示波形

通過網線連接示波器和電腦&#xff0c;將示波器波形顯示在電腦上直接復制圖片至報告中&#xff0c;以下是配置步驟。 一、設備 網線&#xff0c;Tektronix示波器&#xff0c;電腦 二、使用步驟 1.用網線連接電腦和示波器 2.電腦關掉WiFi&#xff0c;查看IPv4網關地址&#xf…