亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

1.引入庫(kù)

代碼如下(示例):

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="請(qǐng)選擇文件">
    <input type="submit" value="上傳">
</form>

action屬性指定了uoload接口。發(fā)送文件的請(qǐng)求方式method必須是post,因?yàn)樾枰猦ttp請(qǐng)求報(bào)文的數(shù)據(jù)體封裝文件數(shù)據(jù)。
編碼方式enctype必須是“multipart/form-data”,指表單數(shù)據(jù)中由多部分構(gòu)成,既有文本數(shù)據(jù),又有文件等二進(jìn)制數(shù)據(jù)。默認(rèn)情況下,enctype的值是“application/x-www-form-urlencoded”,不能用于文件上傳,只有使用了“multipart/form-data”,才能完整的傳遞文件數(shù)據(jù)。“application/x-www-form-urlencoded”不是不能上傳文件,是只能上傳文本格式的文件,multipart/form-data是將文件以二進(jìn)制的形式上傳,這樣可以實(shí)現(xiàn)多種類型的文件上傳。accept屬性是用來(lái)指定文件類型的,屬性值"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());//輸出(上傳文件)保存的絕對(duì)路徑
            String filePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/update/"+format+newname;
            return filePath+"上傳成功";
        }
        catch (IOException e){
            e.printStackTrace();
        }
        return "上傳失敗!";
    }
}

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

4.注意事項(xiàng)

處理前端post請(qǐng)求的接口必須要用 @PostMapping注解,否則post請(qǐng)求無(wú)法訪問(wèn)成功?。。。?/p>

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

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

1.引入庫(kù)

代碼如下(示例):

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屬性設(shè)置請(qǐng)求接口為"/load",download表明這是一個(gè)請(qǐng)求下載的鏈接,且下載到的文件會(huì)被自動(dòng)改名為"file"。這種請(qǐng)求方式是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í)行結(jié)束后并沒(méi)有手動(dòng)關(guān)閉對(duì)應(yīng)的io流,讀者可自行解決

通過(guò)response.getOutputStream()得到ServletOutputStream接口,ServletOutputStream是OutputStream的子接口。(HttpServletResponse)response的輸出流對(duì)應(yīng)的是http響應(yīng)內(nèi)容,通過(guò)response輸出流的write方法就可以給http響應(yīng)報(bào)文的數(shù)據(jù)體內(nèi)寫內(nèi)容了,從而發(fā)送給對(duì)應(yīng)的瀏覽器。

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

4.注意事項(xiàng)

凡是以一個(gè)UIR鏈接進(jìn)行后端接口訪問(wèn)的請(qǐng)求方式都是get方式,對(duì)應(yīng)的接口必須用 @GetMapping進(jìn)行注解,表明該接口可以接受get請(qǐng)求。
凡是返回?cái)?shù)據(jù)的Controller類都應(yīng)該用@RestController標(biāo)注,@Controller標(biāo)注的Controller類是返回視圖的。

總結(jié)

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

相關(guān)文章

  • 反射機(jī)制:getDeclaredField和getField的區(qū)別說(shuō)明

    反射機(jī)制:getDeclaredField和getField的區(qū)別說(shuō)明

    這篇文章主要介紹了反射機(jī)制:getDeclaredField和getField的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • spring boot mybatis枚舉映射示例代碼

    spring boot mybatis枚舉映射示例代碼

    這篇文章主要給大家介紹了關(guān)于spring boot mybatis枚舉映射的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java判斷object對(duì)象為空(包括null ,““)的方法

    Java判斷object對(duì)象為空(包括null ,““)的方法

    這篇文章主要介紹了Java判斷對(duì)象是否為空(包括null ,“”)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 非常適合新手學(xué)生的Java線程池優(yōu)化升級(jí)版

    非常適合新手學(xué)生的Java線程池優(yōu)化升級(jí)版

    作者是一個(gè)來(lái)自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗(yàn),如有錯(cuò)誤請(qǐng)指正,將來(lái)會(huì)不斷的完善筆記,幫助更多的Java愛(ài)好者入門
    2022-03-03
  • 簡(jiǎn)單講解java中throws與throw的區(qū)別

    簡(jiǎn)單講解java中throws與throw的區(qū)別

    這篇文章主要介紹了簡(jiǎn)單講解java中throws與throw的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java基于Calendar類輸出指定年份和月份的日歷代碼實(shí)例

    Java基于Calendar類輸出指定年份和月份的日歷代碼實(shí)例

    這篇文章主要介紹了Java 使用Calendar類輸出指定年份和月份的日歷,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Spring?Boot中使用Spring?Retry重試框架的操作方法

    Spring?Boot中使用Spring?Retry重試框架的操作方法

    這篇文章主要介紹了Spring?Retry?在SpringBoot?中的應(yīng)用,介紹了RetryTemplate配置的時(shí)候,需要設(shè)置的重試策略和退避策略,需要的朋友可以參考下
    2022-04-04
  • MyBatis中PageHelper不生效的解決方案

    MyBatis中PageHelper不生效的解決方案

    這篇文章主要介紹了MyBatis中PageHelper不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • httpclient connect連接請(qǐng)求方法源碼解讀

    httpclient connect連接請(qǐng)求方法源碼解讀

    這篇文章主要為大家介紹了httpclient connect連接請(qǐng)求方法解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java全面解析IO流相關(guān)知識(shí)

    Java全面解析IO流相關(guān)知識(shí)

    這篇文章主要介紹了IO流相關(guān)知識(shí),包括File,字節(jié)流,字符流,特殊操作流(標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,對(duì)象序列化與反序列化,properties與IO流結(jié)合)相關(guān)知識(shí)的總結(jié)
    2021-08-08

最新評(píng)論