最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot上傳文件并返回url過程

 更新時間:2022年11月17日 08:36:06   作者:明明joy  
這篇文章主要介紹了springboot上傳文件并返回url過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springboot上傳文件并返回url

1.首先在yml中配置文件上傳地址 

2.文件保存本地沒有配置在服務器上 需要多寫一個api,在上傳的最后生成一個url

直接上代碼

@Slf4j
@Service
public class StuEmailPhotoServiceImpl implements StuEmailPhotoService {
 
    @Value("${file.email_img_url}")
    String imageUrl;
    @Value("${img.url}")
    String imgUrl;
    @Resource
    StuEmailPhotoMapper stuEmailPhotoMapper;
 
    /**
     * 郵件上傳圖片
     *
     * @param classId
     * @param file
     * @param request
     * @return
     */
    @Override
    public ResultImg batchUpload(Long classId, MultipartFile file, HttpServletRequest request) {
 
        if (null == file) {
            return new ResultImg(ResultInfo.FAIL_CODE, "傳入文件為空!");
        }
        String errMsg = null;
        String newName = null;
        try {
            String oldName = file.getOriginalFilename().toLowerCase();  //獲取圖片的名稱
            String imgPath = null;
            newName = classId + "-emailTemplate-" + UUID.randomUUID() + oldName.substring(oldName.lastIndexOf("."));
            imgPath = imageUrl + classId; // + "/" + newName
            File folder = new File(imgPath);
            //沒有文件夾就創(chuàng)建
            if (!folder.exists()) {
                folder.mkdirs();
            }
 
            //壓縮圖片再保存outputQuality(1f) 越接近1,圖片質量越高
            String suffix = oldName.substring(oldName.lastIndexOf(".") + 1);
            Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(1f).outputFormat(suffix).toFile(new File(folder, newName));
 
            //存儲圖片信息
            StuEmailPhoto stuEmailPhoto = new StuEmailPhoto();
            stuEmailPhoto.setClassId(classId);
            stuEmailPhoto.setImgOname(oldName);
            stuEmailPhoto.setImgName(newName);
            stuEmailPhoto.setImgUrl(imgPath + "/" + newName);
            stuEmailPhoto.setCreateTime(DateFormatUtils.getCurrentTime());
            stuEmailPhoto.setCreator(SecurityUtils.getCurrentUserId());
            stuEmailPhotoMapper.insert(stuEmailPhoto);
 
        } catch (Exception e) {
            errMsg = e.getLocalizedMessage();
            log.error("------StuPlatTrans--------batchUpload-----------:" + e);
        }
        if (StringUtils.isNotEmpty(errMsg)) {
            return new ResultImg(ResultInfo.FAIL_CODE, errMsg);
        }
 
        String url = imgUrl + "api/selectData/readImageView/emailTemplate/" + classId + "/" + newName;
        ImgUrl imgUrl = new ImgUrl();
        imgUrl.setUrl(url);
        List<ImgUrl> urlList = new ArrayList();
        urlList.add(imgUrl);
        return new ResultImg(0, urlList);
    }
 
    /**
     * 瀏覽器讀取圖片
     *
     * @param classId
     * @param imgName
     * @param request
     * @param response
     */
    @Override
    public void readImageView(Long classId, String imgName, HttpServletRequest request, HttpServletResponse response) {
        log.info("----------調(diào)用郵箱readImageView方法---------------");
 
        ServletOutputStream outputStream = null;
        FileInputStream inputStream = null;
 
        try {
            //獲取圖片存放路徑
            String imgPath = null;
            StuEmailPhoto stuEmailPhoto = stuEmailPhotoMapper.getUrlByNameAndClassId(classId, imgName);
            imgName = stuEmailPhoto.getImgName();
            String suffix = imgName.substring(imgName.lastIndexOf(".") + 1);
//            StuPlatTransfer transfer = transferMapper.getImageUrlByName(java.net.URLDecoder.decode(imgName, "utf-8") );
            log.info(JsonHelper.toJsonString(stuEmailPhoto));
            imgPath = stuEmailPhoto.getImgUrl();
            if (null != imgPath) {
                File imgFile = new File(imgPath);
                if (!imgFile.exists()) {
                    return;
                }
//                response.setContentType("application/octet-stream; charset=utf-8");
                response.addHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
                response.addHeader("Access-Control-Expose-Headers", "token,uid,Content-Disposition");
                response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
                response.addHeader("Access-Control-Allow-Headers", "Content-Type");
                response.addHeader("Access-Control-Allow-Credentials", "true");
                response.addHeader("Content-Length", "" + imgFile.length());
                response.setHeader("Pragma", "no-cache");
                response.setHeader("Cache-Control", "no-cache");
                response.setDateHeader("Expires", 0);
 
                inputStream = new FileInputStream(imgFile);
                response.setContentType("image/" + suffix + ";charset=utf-8");
                outputStream = response.getOutputStream();
                //讀取文件流
                int len = 0;
                byte[] buffer = new byte[1024 * 10];
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
                outputStream.flush();
            }
 
        } catch (Exception e) {
            log.error("-----readImageView---imageName--" + imgName + "--err:" + e);
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                log.error("-----readImageView---input close--" + imgName + "--e:" + e);
            }
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (IOException e) {
                log.error("-----readImageView---out close--" + imgName + "--e:" + e);
            }
        }
    }
}

springboot上傳文件兩種方式

1.文件保存在服務器,url地址保存在數(shù)據(jù)庫

	/**
	 * 1.文件保存在服務器,url地址保存在數(shù)據(jù)庫
     * 上傳成功之后返回成功保存的url地址
     */
@PostMapping("/upload")
    public @ResponseBody String upload(@RequestParam MultipartFile file, HttpServletRequest request){
        if(!file.isEmpty()){
            String uploadPath = "C:\uploadFile";
            // 如果目錄不存在則創(chuàng)建
            File uploadDir = new File(uploadPath);
            if (!uploadDir.exists()) {
                uploadDir.mkdir();
            }
            String OriginalFilename = file.getOriginalFilename();//獲取原文件名
            String suffixName = OriginalFilename.substring(OriginalFilename.lastIndexOf("."));//獲取文件后綴名
            //重新隨機生成名字
            String filename = UUID.randomUUID().toString() +suffixName;
            File localFile = new File(uploadPath+"\"+filename);
            try {
                file.transferTo(localFile); //把上傳的文件保存至本地
                /**
                 * 這里應該把filename保存到數(shù)據(jù)庫,供前端訪問時使用
                 */
                return filename;//上傳成功,返回保存的文件地址
            }catch (IOException e){
                e.printStackTrace();
                System.out.println("上傳失敗");
                return "";
            }
        }else{
            System.out.println("文件為空");
            return "";
        }
    }

2.直接把文件以二進制形式保存到數(shù)據(jù)庫中數(shù)據(jù)類型為blob的一個字段

/**
*上傳圖片,使用mybatis-plus保存到數(shù)據(jù)庫
*User為實體類,數(shù)據(jù)庫對應user表,有id、image兩個屬性
*/
@PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) throws Exception{
        if(!file.isEmpty()){
            User user=new User();
            user.setImage(file.getBytes());
            userMapper.insert(user);
        }
        return "ok";
    }
/**
*前端通過id獲取數(shù)據(jù)庫中的圖片
*/
    @GetMapping("/getImage")
    @ResponseBody
    public void getImage(String id,HttpServletResponse resp) throws Exception{
        User user=userMapper.selectById(id);
        byte[] image = (byte[])user.getImage();
        resp.setContentType("image/jpeg");
        ServletOutputStream out = resp.getOutputStream();
        out.write(image);
        out.flush();
        out.close();
    }

3.前端代碼

<form action="/upload" method="post" enctype="multipart/form-data">
? ? <input type="file" name="file" /><br/>
? ? <input type="submit" name="" id="" value="提交" />
</form>

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java中的interrupt、interrupted和isInterrupted方法區(qū)別詳解

    Java中的interrupt、interrupted和isInterrupted方法區(qū)別詳解

    這篇文章主要介紹了Java中的interrupt、interrupted和isInterrupted方法區(qū)別詳解,interrupt用于中斷線程,調(diào)用該方法的線程的狀態(tài)將會被設置為中斷狀態(tài),線程中斷僅僅是設置線程的中斷狀態(tài)位,并不會停止線程,需要用戶自己去監(jiān)視線程的狀態(tài)并作出處理,需要的朋友可以參考下
    2023-12-12
  • Java后臺防止客戶端重復請求、提交表單實現(xiàn)原理

    Java后臺防止客戶端重復請求、提交表單實現(xiàn)原理

    這篇文章主要介紹了Java后臺防止客戶端重復請求、提交表單實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 解決feign接口返回泛型設置屬性為null的問題

    解決feign接口返回泛型設置屬性為null的問題

    這篇文章主要介紹了解決feign接口返回泛型設置屬性為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java將集合List轉換成String字符串(或String轉換成List)詳解

    Java將集合List轉換成String字符串(或String轉換成List)詳解

    今天在寫項目的時候遇到一個問題,就是要把得到的一個集合轉換成字符串,下面這篇文章主要給大家介紹了關于Java將集合List轉換成String字符串(或String轉換成List)的相關資料,需要的朋友可以參考下
    2023-06-06
  • 深入理解SpringBoot中關于Mybatis使用方法

    深入理解SpringBoot中關于Mybatis使用方法

    這篇文章主要介紹了SpringBoot中關于Mybatis使用方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-03-03
  • ElasticSearch的安裝與基本概念

    ElasticSearch的安裝與基本概念

    這篇文章主要介紹了ElasticSearch的安裝與基本概念,提供了一個分布式多用戶能力的全文搜索引擎,Elasticsearch是用Java開發(fā)的,需要的朋友可以參考下
    2023-04-04
  • Java使用正則表達式驗證用戶名和密碼的方法

    Java使用正則表達式驗證用戶名和密碼的方法

    這篇文章主要介紹了Java使用正則表達式驗證用戶名和密碼的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot集成Beetl后統(tǒng)一處理頁面異常的方法

    SpringBoot集成Beetl后統(tǒng)一處理頁面異常的方法

    這篇文章主要介紹了SpringBoot集成Beetl后統(tǒng)一處理頁面異常的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Spring jpa和mybatis整合遇到的問題解析

    Spring jpa和mybatis整合遇到的問題解析

    有朋友說jpa相比mybatis太難用,多表聯(lián)合的查詢寫起來也比較費勁,所以便加入了mybatis的支持,在配置jpa時遇到各種問題,需要修改相關配置文件,下面小編給大家分享下修改配置文件的思路,感興趣的朋友參考下
    2016-10-10
  • JAVA實現(xiàn)通用日志記錄方法

    JAVA實現(xiàn)通用日志記錄方法

    本篇文章主要介紹了JAVA實現(xiàn)通用日志記錄方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

土默特右旗| 临沂市| 绥江县| 宁夏| 广宁县| 台南市| 景谷| 南木林县| 沈阳市| 汨罗市| 烟台市| 额尔古纳市| 阿坝| 得荣县| 平遥县| 沂南县| 仙居县| 凭祥市| 河西区| 平乡县| 房产| 洛宁县| 安仁县| 区。| 光山县| 陇南市| 五原县| 巩义市| 凯里市| 罗城| 师宗县| 东丽区| 安顺市| 芜湖市| 双柏县| 华亭县| 昌宁县| 通许县| 门源| 麻江县| 兰西县|