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

Spring Mvc下實(shí)現(xiàn)以文件流方式下載文件的方法示例

 更新時(shí)間:2019年05月23日 10:16:03   作者:愛吃牛奶糖  
這篇文章主要介紹了Spring Mvc下實(shí)現(xiàn)以文件流方式下載文件的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

項(xiàng)目中需要對一個(gè)點(diǎn)擊事件進(jìn)行下載操作,同時(shí)通過點(diǎn)擊事件,已經(jīng)可以從jsp頁面獲取到需要訪問的URL和下載的文件名(數(shù)據(jù)庫獲取,jsp頁面顯示)。點(diǎn)擊事件JS如下:

function downloadFile(filePath,fileName){
 
 fileName = fileName.substr(0,fileName.lastIndexOf("."));
 $.ajax({
   async : false, 
   cache:false, 
   type: 'get',
   dataType : "json", 
   url: RootPath() + "/checkDownload",//請求的action路徑 
   data:{url:filePath},
   error: function () {//請求失敗處理函數(shù) 
     alert("下載失敗");
   }, 
   success:function(json) { //請求成功后處理函數(shù)。
   var code = json.code;
   if(code) {
    window.location.href = RootPath()+"/todownload?url="+filePath+"&name="+fileName;
   }else {
    layer.alert(fileName+' 文件不存在'); 
   }
   } 
 });
 
}

該ajax調(diào)用后臺(checkDownload)方法,首先判斷從該url能否獲得指定下載的文件,如果獲取不到,方法返回參數(shù)code=0,頁面彈出“...文件不存在”。

 @RequestMapping("/checkDownload")
 @ResponseBody
 public Result checkDownload(String url,HttpServletResponse response) {
 Result result = Result.createSuccessResult();
 HttpURLConnection conn = null;
 try {
  URL path = new URL(url);
  conn = (HttpURLConnection) path.openConnection();
  conn.setRequestMethod("GET");
  conn.setConnectTimeout(5 * 1000);
  conn.getInputStream();// 通過輸入流獲取數(shù)據(jù)
 } catch (IOException ex) {
  result.setCode(0);
  ex.printStackTrace();
 }finally {
  if(conn != null) {
  conn.disconnect();
  }
 }
 return result;
 }
    

如果checkDownload方法中能夠正確獲得資源,方法返回參數(shù)code=1,ajax成功執(zhí)行:window.location.href = RootPath()+"/todownload?url="+filePath+"&name="+fileName;   調(diào)用(todownload)方法,傳入url和name,執(zhí)行文件下載。

 @RequestMapping("/todownload")
 @ResponseBody
 public void download(String url, String name, HttpServletResponse response) {
 HttpURLConnection conn = null;
 try {
  File file = new File(url);
  // 取得文件的后綴名。
  String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1).toLowerCase();
  StringBuffer buffername = new StringBuffer(name);
  String filename = buffername.append(".").append(ext).toString();
 
  URL path = new URL(url);
  conn = (HttpURLConnection) path.openConnection();
  conn.setRequestMethod("GET");
  conn.setConnectTimeout(5 * 1000);
  InputStream fis = conn.getInputStream();// 通過輸入流獲取數(shù)據(jù)
 
  byte[] buffer = readInputStream(fis);
  if (null != buffer && buffer.length > 0) {
  // 清空response
  response.reset();
  // 設(shè)置response的Header
  response.addHeader("Content-Disposition","attachment;filename="+ new String((filename).getBytes("GBK"),"ISO8859_1"));
  response.addHeader("Content-Length", "" + buffer.length);
  OutputStream toClient = response.getOutputStream();
  response.setContentType("application/octet-stream");
  toClient.write(buffer);
  toClient.flush();
  toClient.close();
  }
 
 } catch (IOException ex) {
  ex.printStackTrace();
 }finally {
  if(conn != null) {
  conn.disconnect();
  }
 }
 }
 
  /** 
   * 從輸入流中獲取數(shù)據(jù) 
   * @param inStream 輸入流 
   * @return 
   * @throws Exception 
   */ 
 private byte[] readInputStream(InputStream fis) throws IOException {
  ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
     byte[] buffer = new byte[1024]; 
     int len = 0; 
     while( (len=fis.read(buffer)) != -1 ){ 
       outStream.write(buffer, 0, len); 
     } 
     fis.close(); 
     return outStream.toByteArray();
 } 

PS:Spring MVC 文件流形式下載(返回)視頻文件

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;

/**
 * 文件流形式下載視頻
 * @author Front Ng
 * @date 2019-05-23 09:25
 **/

@Controller
@RequestMapping(value = "/download")
@Api(value = "下載", tags = "下載")
public class DownloadController {


  @ApiOperation(value = "下載視頻")
  @RequestMapping(method = RequestMethod.GET)
  public void download(HttpServletResponse response) throws IOException {

    File file = new File("/Users/front/Downloads/123.mp4");

    FileInputStream inputStream = new FileInputStream(file);
    byte[] data = new byte[(int) file.length()];
    int length = inputStream.read(data);
    inputStream.close();

    String fileName = URLEncoder.encode("文件流形式視頻.mp4", "UTF-8");

    response.setContentType("application/octet-stream;charset=UTF-8");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
    response.addHeader("Content-Length", "" + data.length);

    OutputStream stream = response.getOutputStream();
    stream.write(data);
    stream.flush();
    stream.close();
  }
}

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

相關(guān)文章

  • Java鎖機(jī)制Lock用法示例

    Java鎖機(jī)制Lock用法示例

    這篇文章主要介紹了Java鎖機(jī)制Lock用法,結(jié)合具體實(shí)例形式分析了Java鎖機(jī)制的相關(guān)上鎖、釋放鎖、隱式鎖、顯式鎖等概念與使用技巧,需要的朋友可以參考下
    2018-08-08
  • Java中for、while、do while三種循環(huán)語句的區(qū)別介紹

    Java中for、while、do while三種循環(huán)語句的區(qū)別介紹

    這篇文章主要介紹了Java中for、while、do while三種循環(huán)語句的區(qū)別介紹的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • 基于spring boot 的配置參考大全(推薦)

    基于spring boot 的配置參考大全(推薦)

    下面小編就為大家?guī)硪黄趕pring boot 的配置參考大全(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Spring?MVC??接受請求參數(shù)的方法

    Spring?MVC??接受請求參數(shù)的方法

    了解HTTP請求的GET和POST方法中如何攜帶參數(shù),以及SpringMVC中如何接收這些參數(shù),GET方法通過URL傳遞參數(shù),而POST方法通常在請求體中傳遞,SpringMVC使用注解如@RequestParam和@RequestBody來綁定參數(shù)到控制器方法
    2024-09-09
  • Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(共享模式)

    Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(共享模式)

    這篇文章主要為大家詳細(xì)介紹了Java并發(fā)系列之AbstractQueuedSynchronizer源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java 配置加載機(jī)制詳解及實(shí)例

    Java 配置加載機(jī)制詳解及實(shí)例

    這篇文章主要介紹了Java 配置加載機(jī)制詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 如何使用Spring Security實(shí)現(xiàn)用戶-角色-資源的權(quán)限控制

    如何使用Spring Security實(shí)現(xiàn)用戶-角色-資源的權(quán)限控制

    文章介紹了如何通過SpringSecurity實(shí)現(xiàn)用戶-角色-資源的權(quán)限管理,包括基于角色的請求控制、加載用戶角色信息、角色與資源的關(guān)聯(lián)等步驟,同時(shí),提供了一些測試場景,以驗(yàn)證權(quán)限控制是否正確,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • spring中前端明明傳了值后端卻接收不到問題解決辦法

    spring中前端明明傳了值后端卻接收不到問題解決辦法

    在學(xué)習(xí)Spring的時(shí)候遇到了一個(gè)問題,后臺一直接收不到前臺傳遞過來的參數(shù),耽誤了好長時(shí)間終于找到了原因,這篇文章主要給大家介紹了關(guān)于spring中前端明明傳了值后端卻接收不到問題的解決辦法,需要的朋友可以參考下
    2024-05-05
  • Docker容器中的SSH免密登錄詳解

    Docker容器中的SSH免密登錄詳解

    這篇文章主要介紹了Docker容器中的SSH免密登錄詳解,在日常的開發(fā)和測試環(huán)境中經(jīng)常需要創(chuàng)建和管理Docker容器,有時(shí),出于調(diào)試或管理的目的,可能需要SSH到容器內(nèi)部,本文將介紹如何創(chuàng)建一個(gè)Docker容器,它在啟動時(shí)自動運(yùn)行SSH服務(wù),并支持免密登錄,需要的朋友可以參考下
    2023-08-08
  • Spring-IOC容器中的常用注解與使用方法詳解

    Spring-IOC容器中的常用注解與使用方法詳解

    Spring是一個(gè)輕量級Java開發(fā)框架,最早有Rod Johnson創(chuàng)建,目的是為了解決企業(yè)級應(yīng)用開發(fā)的業(yè)務(wù)邏輯層和其他各層的耦合問題,這篇文章給大家詳細(xì)介紹Spring-IOC容器中的常用注解與使用方法,感興趣的朋友跟隨小編一起看看吧
    2021-04-04

最新評論

沁水县| 当阳市| 哈巴河县| 旬邑县| 汾阳市| 兴宁市| 呼玛县| 响水县| 乌鲁木齐县| 喀什市| 冀州市| 会理县| 政和县| 蒙城县| 武汉市| 镇江市| 成都市| 湘乡市| 托克逊县| 汉沽区| 洛南县| 福清市| 天祝| 柳江县| 安义县| 凤山市| 江津市| 鄯善县| 吴川市| 昌宁县| 濮阳县| 达孜县| 文安县| 乌兰浩特市| 芦溪县| 通州区| 齐齐哈尔市| 泸定县| 玛纳斯县| 金乡县| 九江市|