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

Springboot接收文件與發(fā)送文件實例教程

 更新時間:2023年05月27日 11:06:54   作者:都是些老物件  
最近工作中遇到個需求,springboot簡單的上傳文檔或者圖片,并且進行操作,操作完后進行保存指定路徑,下面這篇文章主要給大家介紹了關于Springboot接收文件與發(fā)送文件的相關資料,需要的朋友可以參考下

前言

前后端涉及到文件的傳輸,都是以二進制流的形式進行交互的。

一、前端上傳文件,Springboot接受并保存在某個路徑

示例:springboot內部封裝了MultipartFile接口,用于接收和處理前端發(fā)送過來的文件。

1.引入庫

代碼如下(示例):

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

2.前端核心代碼(發(fā)送文件)

代碼如下(示例):

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="multipartfile" accept="image/png" value="請選擇文件">
    <input type="submit" value="上傳">
</form>

action屬性指定了uoload接口。發(fā)送文件的請求方式method必須是post,因為需要http請求報文的數據體封裝文件數據。
編碼方式enctype必須是“multipart/form-data”,指表單數據中由多部分構成,既有文本數據,又有文件等二進制數據。默認情況下,enctype的值是“application/x-www-form-urlencoded”,不能用于文件上傳,只有使用了“multipart/form-data”,才能完整的傳遞文件數據。“application/x-www-form-urlencoded”不是不能上傳文件,是只能上傳文本格式的文件,multipart/form-data是將文件以二進制的形式上傳,這樣可以實現多種類型的文件上傳。accept屬性是用來指定文件類型的,屬性值"image/png"表示只能上傳.png圖片的文件。

3.Controller類

代碼如下(示例):

@RestController
public class uploadcontroller {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    @PostMapping("/upload")
    public String upload(MultipartFile multipartfile, HttpServletRequest request){
        String realPath = request.getSession().getServletContext().getRealPath("/update/");
        String format=sdf.format(new Date());
        File folder=new File(realPath+format);
        if(!folder.isDirectory()){
            folder.mkdirs();
        }
        String oldname = multipartfile.getOriginalFilename();
        String newname = UUID.randomUUID().toString()+oldname.substring(oldname.lastIndexOf("."),oldname.length());
        try {
            multipartfile.transferTo(new File(folder, newname));
            System.out.println(new File(folder, newname).getAbsolutePath());//輸出(上傳文件)保存的絕對路徑
            String filePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/update/"+format+newname;
            return filePath+"上傳成功";
        }
        catch (IOException e){
            e.printStackTrace();
        }
        return "上傳失敗!";
    }
}

multipartfile封裝了接受到的文件,multipartfile.getOriginalFilename()獲取上傳文件的完整名稱,包括文件名和文件擴展名(如.png,.txt等指定文件類型的后綴);multipartfile.transferTo(new File(folder, newname))將接受文件下載到new File(folder, newname)對象指定的路徑下。
request封裝了http請求對象。request.getSession()獲取一個http請求的session(會話);getServletContext()獲取一個http請求對應的web應用上下文;getRealPath(“/update/”)獲取一個相對(web應用上下文)地址為“/update/”的絕對地址。

4.注意事項

處理前端post請求的接口必須要用 @PostMapping注解,否則post請求無法訪問成功?。。?!

二、Springboot發(fā)送文件,前端接收并下載。

示例:MIME(Multipurpose Internet Mail Extensions)是一種多用途互聯網郵件擴展。但不局限于郵件,適用于所有的瀏覽器能接受的文件。服務器會將它們發(fā)送的多媒體數據的類型告訴瀏覽器,而通知手段就是說明該多媒體數據的MIME類型,從而讓瀏覽器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服務器將MIME標志符放入傳送的數據中來告訴瀏覽器使用哪種插件讀取相關文件。
Springboot可通過(HttpServletResponse對象)response.setContentType(contenttype)設置發(fā)送到瀏覽器(前端)的響應內容的類型。
給瀏覽器(前端)的文件必須是以二進制流的形式發(fā)送的(在Java中要用io流對發(fā)送文件進行處理,以字節(jié)數組(byte[])的形式發(fā)送),因為只有以二進制的形式,才能處理文件中多類型的數據。

1.引入庫

代碼如下(示例):

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.IOException;

2.前端核心代碼(發(fā)送文件)

代碼如下(示例):

<a href="/load" rel="external nofollow"  download="file">下載文件</a>

href屬性設置請求接口為"/load",download表明這是一個請求下載的鏈接,且下載到的文件會被自動改名為"file"。這種請求方式是get形式。

3.Controller類

代碼如下(示例):

@RestController
public class loadcontroller {
    @GetMapping("/load")
    public void fileload( HttpServletResponse response) throws IOException {
        File f = new File("C:\\Users\\Java\\Desktop\\新建 文本文檔.txt");
        FileInputStream ips = new FileInputStream(f);
        OutputStream ops = response.getOutputStream();
        response.setContentType("application/octet-stream; charset=UTF-8");
        byte[] a = new byte[1000];
        ips.read(a);
        ops.write(a);
    }
}
//本代碼在執(zhí)行結束后并沒有手動關閉對應的io流,讀者可自行解決

通過response.getOutputStream()得到ServletOutputStream接口,ServletOutputStream是OutputStream的子接口。(HttpServletResponse)response的輸出流對應的是http響應內容,通過response輸出流的write方法就可以給http響應報文的數據體內寫內容了,從而發(fā)送給對應的瀏覽器。

response.setContentType(“application/octet-stream; charset=UTF-8”)設置響應內容的類型為二進制流(application/octet-stream),字符編碼方式為UTF-8。

4.注意事項

凡是以一個UIR鏈接進行后端接口訪問的請求方式都是get方式,對應的接口必須用 @GetMapping進行注解,表明該接口可以接受get請求。
凡是返回數據的Controller類都應該用@RestController標注,@Controller標注的Controller類是返回視圖的。

總結

到此這篇關于Springboot接收文件與發(fā)送文件的文章就介紹到這了,更多相關Springboot接收文件與發(fā)送文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • 新手初學Java數組

    新手初學Java數組

    數組是相同類型數據的有序集合數組描述的是相同類型的若干個數據,按照一定的先后次序排列組合而成。其中,每一個數據稱作一個數組元素,每個數組元素可以通過一個下標來訪問它們數組的聲明創(chuàng)建
    2021-07-07
  • java設計模式之建造者模式學習

    java設計模式之建造者模式學習

    建造者模式(Builder Pattern)主要用于“分步驟構建一個復雜的對象”,在這其中“分步驟”是一個穩(wěn)定的算法,下面給出了詳細的示例
    2014-01-01
  • Java8新特性Stream的完全使用指南

    Java8新特性Stream的完全使用指南

    這篇文章主要給大家介紹了關于Java8新特性Stream的完全使用指南,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • Java ArrayList的不同排序方法

    Java ArrayList的不同排序方法

    這篇文章主要介紹了Java ArrayList的不同排序方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Mybatis-plus通用查詢方法封裝的實現

    Mybatis-plus通用查詢方法封裝的實現

    本文主要介紹了Mybatis-plus通用查詢方法封裝的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 使用mvn?deploy命令上傳jar包的實現

    使用mvn?deploy命令上傳jar包的實現

    本文介紹了使用mvndeploy:deploy-file命令將本地倉庫中的JAR包重新發(fā)布到Maven私服,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Java遞歸算法遍歷部門代碼示例

    Java遞歸算法遍歷部門代碼示例

    這篇文章主要介紹了Java遞歸算法遍歷部門代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • java實現多人聊天對話室

    java實現多人聊天對話室

    這篇文章主要為大家詳細介紹了java實現多人聊天對話室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • JDK8環(huán)境中使用struts2的步驟詳解

    JDK8環(huán)境中使用struts2的步驟詳解

    這篇文章主要給大家介紹了關于在JDK8環(huán)境中使用struts2的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • 詳解Java中方法next()和nextLine()的區(qū)別與易錯點

    詳解Java中方法next()和nextLine()的區(qū)別與易錯點

    這篇文章主要介紹了詳解Java中方法next()和nextLine()的區(qū)別與易錯點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

灌云县| 临武县| 曲松县| 芮城县| 大渡口区| 城步| 明溪县| 静乐县| 泰安市| 平顶山市| 香港 | 专栏| 濮阳市| 盈江县| 拉萨市| 聂拉木县| 类乌齐县| 洛南县| 阿克| 准格尔旗| 鸡泽县| 旬邑县| 栾川县| 萨嘎县| 栾川县| 阜新市| 桑日县| 漳浦县| 郁南县| 宜君县| 伊金霍洛旗| 新昌县| 定结县| 敦煌市| 本溪市| 镇原县| 搜索| 娱乐| 吉木萨尔县| 含山县| 泰安市|