成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

基于SpringMVC的文件下載實例-創(chuàng)新互聯(lián)

文件的下載和文件的上傳一樣都是Web應用中一個重要的功能點。這篇“SpingMVC的文件下載”是基于以前寫過的那篇“SpringMVC實現(xiàn)文件上傳”寫的,因此這里就不從頭開始搭建測試項目了,直接接著上次的那個項目來進行測試,因此看這篇文章之前需要簡單瀏覽下上次的那篇文章

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、高港網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、html5、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為高港等各大城市提供網(wǎng)站開發(fā)制作服務。

注:SpringMVC實現(xiàn)文件上傳:http://www.zifangsky.cn/406.html

(1)在UploadController.java這個controller里的upload方法中添加返回上傳之后的文件的文件名:

modelAndView.addObject("picName", targetFileName);

添加之后,這個方法的完整代碼如下:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
	public ModelAndView upload(User user, @RequestParam("file") MultipartFile tmpFile, HttpServletRequest request) {
		ModelAndView modelAndView = new ModelAndView("fileupload");

		if (tmpFile != null) {
			// 獲取物理路徑
			String targetDirectory = request.getSession().getServletContext().getRealPath("/uploads");
			String tmpFileName = tmpFile.getOriginalFilename(); // 上傳的文件名
			int dot = tmpFileName.lastIndexOf('.');
			String ext = ""; // 文件后綴名
			if ((dot > -1) && (dot < (tmpFileName.length() - 1))) {
				ext = tmpFileName.substring(dot + 1);
			}
			// 其他文件格式不處理
			if ("png".equalsIgnoreCase(ext) || "jpg".equalsIgnoreCase(ext) || "gif".equalsIgnoreCase(ext)) {
				// 重命名上傳的文件名
				String targetFileName = StringUtile.renameFileName(tmpFileName);
				// 保存的新文件
				File target = new File(targetDirectory, targetFileName);

				try {
					// 保存文件
					FileUtils.copyInputStreamToFile(tmpFile.getInputStream(), target);
				} catch (IOException e) {
					e.printStackTrace();
				}

				User u = new User();
				u.setUserName(user.getUserName());
				u.setLogoSrc(request.getContextPath() + "/uploads/" + targetFileName);

				modelAndView.addObject("u", u);
				modelAndView.addObject("picName", targetFileName);
			}

			return modelAndView;
		}

		return modelAndView;
	}

(2)在fileupload.jsp這個文件中添加一個文件下載的超鏈接:

<h3>頭像下載</h3>		
	<a href="download.html?fileName=${picName}">點擊下載</a>

可以看出,這里的fileName就是用的controller中的“picName”來賦值的

基于SpringMVC的文件下載實例

注:代碼添加的位置如上圖所示

(3)在UploadController.java中添加一個用于下載文件的方法,代碼如下:

@RequestMapping(value = "/download", method = { RequestMethod.GET, RequestMethod.POST })
	public ResponseEntity<byte[]> download(@RequestParam(name = "fileName") String fileName,
			HttpServletRequest request) {
		HttpHeaders headers = new HttpHeaders();
		Pattern pattern = Pattern.compile("\\w*\\.\\w+");
		Matcher matcher = pattern.matcher(fileName);
		
		//檢查文件名中非法字符,只允許是字母、數(shù)字和下劃線
		if (matcher.matches()) {
			try {
				headers.setContentDispositionFormData("myfile", fileName);
				headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
				// 獲取物理路徑
				String filePath = request.getSession().getServletContext().getRealPath("/uploads");
				File pic = new File(filePath, fileName);
				return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(pic), headers, HttpStatus.CREATED);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return null;
	}

注:從上面的代碼可以看出,通過接收表示文件名的字符串然后跟文件的路徑拼接起來,形成文件在磁盤中真實路徑的File對象,最后返回文件的流并進行下載。需要注意的是,為了防止出現(xiàn)任意文件下載,導致下載到其他路徑中的文件,因此在下載之前校驗了文件名的格式。同時最后返回了一個ResponseEntity<byte[]>類型的數(shù)據(jù),是為了在返回數(shù)據(jù)流的同時返回我們自定義的HttpHeaders和HttpStatus

(4)最后下載的效果如下:

基于SpringMVC的文件下載實例

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。

網(wǎng)站題目:基于SpringMVC的文件下載實例-創(chuàng)新互聯(lián)
鏈接地址:http://jinyejixie.com/article0/cccpio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、響應式網(wǎng)站企業(yè)建站、網(wǎng)站營銷、網(wǎng)站建設、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
嘉黎县| 屏南县| 威信县| 桑日县| 台南县| 怀来县| 文成县| 霞浦县| 辽宁省| 韩城市| 陆河县| 普格县| 三明市| 观塘区| 明光市| 新疆| 临桂县| 怀宁县| 永靖县| 龙泉市| 萨迦县| 阿图什市| 苍溪县| 巴马| 阿拉善左旗| 车致| 家居| 辽中县| 静宁县| 岢岚县| 东宁县| 会昌县| 凌海市| 黔南| 西贡区| 水城县| 噶尔县| 钟山县| 清流县| 阿拉善右旗| 商都县|