欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)圖片文件上傳

 更新時(shí)間:2022年06月23日 11:14:29   作者:糖味oO  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖片文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Java實(shí)現(xiàn)后臺(tái)圖片上傳,將上傳圖片的接口進(jìn)行分層,便于維護(hù)接口。

接口部分(interface)

將接口分為單圖片上傳以及多圖片上傳

public interface FileUploadService {
?? ?//單圖片上傳
? ? PicUploadResult uplodadImg(MultipartFile uploadFile, HttpServletRequest request);

?? ?//多圖片上傳
? ? PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request);
}

接口實(shí)現(xiàn)類(interface impl)

上傳圖片方法類(主要)

上傳多個(gè)圖片只是使用了數(shù)組的方式將文件存到MultipartFile里面。以防代碼冗余,所以將實(shí)現(xiàn)方法抽出來

/**
? ? ?* 上傳圖片方法類
? ? ?* @param multipartFile
? ? ?* @param request
? ? ?* @return
? ? ?*/
? ? private PicUploadResult uploadImgMethod(MultipartFile multipartFile, HttpServletRequest request) {
? ? ? ? PicUploadResult picUploadResult = new PicUploadResult();

? ? ? ? if (multipartFile.isEmpty()) {
? ? ? ? ? ? //返回選擇文件提示
? ? ? ? ? ? picUploadResult.setLegal(false);
? ? ? ? ? ? return picUploadResult;
? ? ? ? }
? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/");
? ? ? ? String format = sdf.format(new Date());
? ? ? ? //存放上傳文件的文件夾
? ? ? ? File file = new File(baseFilePath + format);
? ? ? ? logger.info("-----------存放上傳文件的文件夾【" + file + "】-----------");
? ? ? ? logger.info("-----------輸出文件夾絕對(duì)路徑 -- 這里的絕對(duì)路徑是相當(dāng)于當(dāng)前項(xiàng)目的路徑而不是“容器”路徑【" + file.getAbsolutePath() + "】-----------");
? ? ? ? if (!file.isDirectory()) {
? ? ? ? ? ? //遞歸生成文件夾
? ? ? ? ? ? file.mkdirs();
? ? ? ? }
? ? ? ? //獲取原始的名字 ?original:最初的,起始的 ?方法是得到原來的文件名在客戶機(jī)的文件系統(tǒng)名稱
? ? ? ? String oldName = multipartFile.getOriginalFilename();
? ? ? ? logger.info("-----------文件原始的名字【" + oldName + "】-----------");
? ? ? ? String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length());
? ? ? ? logger.info("-----------文件要保存后的新名字【" + newName + "】-----------");
? ? ? ? try {
? ? ? ? ? ? //構(gòu)建真實(shí)的文件路徑
? ? ? ? ? ? File newFile = new File(file.getAbsolutePath() + File.separator + newName);
? ? ? ? ? ? //轉(zhuǎn)存文件到指定路徑,如果文件名重復(fù)的話,將會(huì)覆蓋掉之前的文件,這里是把文件上傳到 “絕對(duì)路徑”
? ? ? ? ? ? multipartFile.transferTo(newFile);
? ? ? ? ? ? String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/picbook/" + UPLOAD_PATH_PREFIX + format + newName;
? ? ? ? ? ? logger.info("-----------【" + filePath + "】-----------");
? ? ? ? ? ? picUploadResult.setLegal(true);
? ? ? ? ? ? picUploadResult.setImgPath(filePath);
? ? ? ? ? ? return picUploadResult;
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? picUploadResult.setLegal(false);
? ? ? ? return picUploadResult;
? ? }

實(shí)現(xiàn)方法接口

單圖片上傳

public PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {
? ? ? ? return uploadImgMethod(multipartFile, request);
? ? }

多圖片上傳

public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) {

? ? ? ? List<String> imgPaths = new ArrayList<>();
? ? ? ? for (MultipartFile multipartFile : uploadFile) {
? ? ? ? ? ? PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);
? ? ? ? ? ? if(picUploadResult.isLegal()){
? ? ? ? ? ? ? ? imgPaths.add(picUploadResult.getImgPath());
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? return picUploadResult;
? ? ? ? ? ? }

? ? ? ? }

? ? ? ? PicUploadResult picUploadResult = new PicUploadResult();
? ? ? ? picUploadResult.setLegal(true);
? ? ? ? picUploadResult.setImgPahts(imgPaths);
? ? ? ? return picUploadResult;
? ? }

實(shí)現(xiàn)方法補(bǔ)充

// 項(xiàng)目上傳至絕對(duì)路徑(在yml里配置你的項(xiàng)目絕對(duì)路徑)
? ? @Value("${file.save-path}")
? ? private String baseFilePath;
? ? // 項(xiàng)目根路徑下的目錄 ?-- SpringBoot static 目錄相當(dāng)于是根路徑下(SpringBoot 默認(rèn))
? ? private final static String UPLOAD_PATH_PREFIX = "statics/uploadFile/";

控制層

public class FileUploadController {
? ? // 允許上傳的格式 圖片形式
? ? private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"};

? ? @Resource
? ? private FileUploadService fileUploadService;

? ? @PostMapping("/uploadImg")
? ? public R uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
? ? ? ? boolean isFlag = false;
? ? ? ? for (String type : IMAGE_TYPE) {
? ? ? ? ? ? System.out.println(file.getOriginalFilename());
? ? ? ? ? ? if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
? ? ? ? ? ? ? ? isFlag = true;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? if (isFlag) {
? ? ? ? ? ? PicUploadResult picUploadResult = fileUploadService.uplodadImg(file, request);
? ? ? ? ? ? boolean isLegal = picUploadResult.isLegal();

? ? ? ? ? ? if (isLegal) {
? ? ? ? ? ? ? ? Map resMap = new HashMap<>();
? ? ? ? ? ? ? ? resMap.put("imgPath", picUploadResult.getImgPath());
? ? ? ? ? ? ? ? return R.ok(resMap);
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? return R.error("圖片上傳有誤");
? ? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? ? return R.error("上傳的圖片格式必須為:bmp,jpg,jpeg,png");
? ? ? ? }

? ? }

? ? @PostMapping("/uploadManyImg")
? ? public R uploadManyImg(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
? ? ? ? boolean isFlag = false;
? ? ? ? for (MultipartFile uploadFile : files) {
? ? ? ? ? ? for (String type : IMAGE_TYPE) {
? ? ? ? ? ? ? ? if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
? ? ? ? ? ? ? ? ? ? isFlag = true;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? if (isFlag) {
? ? ? ? ? ? PicUploadResult picUploadResult = fileUploadService.uploadManyImg(files, request);
? ? ? ? ? ? boolean isLegal = picUploadResult.isLegal();

? ? ? ? ? ? if (isLegal) {
? ? ? ? ? ? ? ? Map resMap = new HashMap<>();
? ? ? ? ? ? ? ? resMap.put("imgPaths", picUploadResult.getImgPahts());
? ? ? ? ? ? ? ? return R.ok(resMap);
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? return R.error("圖片上傳有誤");
? ? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? ? return R.error("上傳的圖片格式必須為:bmp,jpg,jpeg,png");
? ? ? ? }
? ? }
}

工具類

根據(jù)實(shí)際情況添加所需的字段

public class PicUploadResult
{
? ? private boolean isLegal;

? ? private String imgPath;

? ? private List<String> imgPahts;

}

Postman

(僅用于個(gè)人學(xué)習(xí)編碼記錄,代碼均參考于百度以及自己改進(jìn),如有疑問歡迎大家積極討論)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實(shí)現(xiàn)方法

    SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實(shí)現(xiàn)方法

    這篇文章主要介紹了SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • SpringBoot實(shí)現(xiàn)點(diǎn)餐系統(tǒng)的登錄與退出功能流程詳解

    SpringBoot實(shí)現(xiàn)點(diǎn)餐系統(tǒng)的登錄與退出功能流程詳解

    結(jié)束了Springboot+MyBatisPlus也是開始了項(xiàng)目之旅,將從后端的角度出發(fā)來整理這個(gè)項(xiàng)目中重點(diǎn)業(yè)務(wù)功能的梳理與實(shí)現(xiàn)
    2022-10-10
  • 一種新的日期處理方式之JavaScript Temporal API

    一種新的日期處理方式之JavaScript Temporal API

    JavaScript Temporal API是一種為Web開發(fā)人員提供了一種新的處理日期和時(shí)間數(shù)據(jù)類型的方式。它的目的是使操作日期和時(shí)間更加簡單和可靠,而且不用擔(dān)心歷史時(shí)區(qū)問題或全球化協(xié)調(diào)時(shí)間(UTC)之類的問題,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Java設(shè)計(jì)模式之外觀模式(Facade模式)介紹

    Java設(shè)計(jì)模式之外觀模式(Facade模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之外觀模式(Facade模式)介紹,外觀模式(Facade)的定義:為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,需要的朋友可以參考下
    2015-03-03
  • java編程中實(shí)現(xiàn)調(diào)用js方法分析

    java編程中實(shí)現(xiàn)調(diào)用js方法分析

    這篇文章主要介紹了java編程中實(shí)現(xiàn)調(diào)用js方法,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了java編程中調(diào)用js方法的常用操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • spring boot容器啟動(dòng)流程

    spring boot容器啟動(dòng)流程

    spring cloud是基于spring boot快速搭建的,今天咱們就看看spring boot容器啟動(dòng)流程,需要的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-01-01
  • springboot掃描自定義的servlet和filter代碼詳解

    springboot掃描自定義的servlet和filter代碼詳解

    本文是一篇根據(jù)作者工作經(jīng)歷總結(jié)出來的關(guān)于springboot掃描自定義的servlet和filter代碼詳解的文章,小編覺得非常不錯(cuò),這里給大家分享下,和朋友們一起學(xué)習(xí),進(jìn)步。
    2017-10-10
  • SpringBoot中使用@ControllerAdvice注解詳解

    SpringBoot中使用@ControllerAdvice注解詳解

    這篇文章主要介紹了SpringBoot中使用@ControllerAdvice注解詳解,@ControllerAdvice,是Spring3.2提供的新注解,它是一個(gè)Controller增強(qiáng)器,可對(duì)controller中被 @RequestMapping注解的方法加一些邏輯處理,需要的朋友可以參考下
    2023-10-10
  • java反射獲取包下所有類的操作

    java反射獲取包下所有類的操作

    這篇文章主要介紹了java反射獲取包下所有類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • JavaGUI實(shí)現(xiàn)隨機(jī)單詞答題游戲

    JavaGUI實(shí)現(xiàn)隨機(jī)單詞答題游戲

    這篇文章主要為大家詳細(xì)介紹了JavaGUI實(shí)現(xiàn)隨機(jī)單詞答題游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評(píng)論