分析文件下載

原生態(tài)js實(shí)現(xiàn)文件下載

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="sunpeiyu文件下載">
    <meta name="author" content="sunpeiyu">
    <meta http-equiv="Access-Control-Allow-Origin" content="*">
    <title>Document</title>
    <style type="text/css">
        body {
            background-color: white;
        }
    </style>

    <script type="text/javascript">
        function downloadFile() {
            const link = document.createElement('a');
            link.style.display = 'none';
            link.download = '640.png';
            link.href = 'http://localhost:8091/diverter/file/download/640.png';
            link.click();
        }
    </script>
</head>

<body>
    <div>
        <a href="#" onclick="downloadFile()">文件下載</a>
    </div>
</body>
</html>

springboot實(shí)現(xiàn)文件下載

import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

@Slf4j
@RequestMapping("/file")
@RestController
public class FileController {

    @GetMapping("/download/{fileName}")
    public String handleFileDownload(@PathVariable String fileName,
                                     HttpServletResponse response,
                                     HttpServletRequest request) throws IOException {
        String downloadFilePath = "F:\\temp" + File.separator + fileName;

        if (!FileUtil.exist(downloadFilePath)) {
            return "下載文件不存在";
        }

        byte[] fileByteArr = FileUtil.readBytes(downloadFilePath);

        /**
         * 解決跨域請(qǐng)求問(wèn)題
         */
        response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE,PATCH");
        response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));

        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
        response.setHeader("Content-Type", "application/octet-stream");
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(fileByteArr);
        outputStream.flush();
        outputStream.close();
        return "下載文件成功";
    }
}

效果:



HTTP角度看文件下載


通過(guò)Content-Type指定響應(yīng)返回的類型為文件類型(application/octet-stream)又谋。然后保存時(shí)顯示的文件名,使用Content-Disposition響應(yīng)頭指定顯示文件名為640.png彰亥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剩愧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仁卷,更是在濱河造成了極大的恐慌,老刑警劉巖锦积,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丰介,死亡現(xiàn)場(chǎng)離奇詭異鉴分,居然都是意外死亡带膀,警方通過(guò)查閱死者的電腦和手機(jī)志珍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)伦糯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗽元,“玉大人,你說(shuō)我怎么就攤上這事剂癌。” “怎么了佩谷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵琳要,是天一觀的道長(zhǎng)秤茅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)框喳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任乍惊,我火速辦了婚禮放仗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诞挨。我一直安慰自己,他們只是感情好棍郎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布银室。 她就那樣靜靜地躺著励翼,像睡著了一般辜荠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伯病,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音膨蛮,去河邊找鬼季研。 笑死,一個(gè)胖子當(dāng)著我的面吹牛与涡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驼卖,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酌畜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了桥胞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤催烘,失蹤者是張志新(化名)和其女友劉穎缎罢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體策精,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蔽午,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酬蹋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抽莱。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骄恶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虐呻,到底是詐尸還是另有隱情寞秃,我是刑警寧澤斟叼,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布朗涩,位于F島的核電站,受9級(jí)特大地震影響谢床,放射性物質(zhì)發(fā)生泄漏厘线。R本人自食惡果不足惜识腿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一渡讼、第九天 我趴在偏房一處隱蔽的房頂上張望费薄。 院中可真熱鬧硝全,春花似錦楞抡、人聲如沸析藕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)治泥。三九已至筹煮,卻和暖如春居夹,著一層夾襖步出監(jiān)牢的瞬間本冲,已是汗流浹背劫扒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沟饥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓广料,卻偏偏與公主長(zhǎng)得像幼驶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子县遣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容