웹 개발에서는 "다운로드" 모듈을 개발해야 하는 경우가 많습니다. 아래에는 간단한 예가 나와 있습니다.
서버 측에서는 Java 개발을 사용합니다.
@RequestMapping(value = "download.html", method = RequestMethod.GET) public void download(String resourceid, HttpServletRequest request, HttpServletResponse response) { response.setContentType("charset=UTF-8"); File file = new File(path); response.setHeader("Content-Disposition", "attachment; filename=a"); BufferedInputStream bis = null; BufferedOutputStream bos = null; OutputStream fos = null; InputStream fis = null; try { fis = new FileInputStream(file.getAbsolutePath()); bis = new BufferedInputStream(fis); fos = response.getOutputStream(); bos = new BufferedOutputStream(fos); int bytesRead = 0; byte[] buffer = new byte[5 * 1024]; while ((bytesRead = bis.read(buffer)) != -1) { bos.write(buffer, 0, bytesRead); } bos.flush(); }catch(E e){ }finally { try { bis.close(); bos.close(); fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
프런트 엔드에서 이 주소를 요청하면 서버는 먼저 파일을 찾아 응답 헤더를 설정한 후 스트림을 통해 브라우저에 출력합니다.
브라우저가 응답 본문이 헤더의 스트림 파일임을 발견하면 사용자가 다운로드를 저장할 수 있도록 자동으로 다른 이름으로 저장 창을 호출합니다.
여기서 핵심은 헤더 속성인 Content-Disposition입니다. Content-Disposition은 MIME 프로토콜의 확장이며 첨부 파일을 표시하는 방법을 클라이언트에 지시하는 데 사용됩니다.
두 가지 값으로 설정할 수 있습니다:
인라인 //온라인 오픈
첨부파일 //첨부파일로 다운로드
여기서 설정한 값은 첨부파일이므로 첨부파일로 인식하여 다운로드할 수 있습니다.
위에서는 서버 측 작성 방법을 설명하고, 다음에서는 프런트엔드 요청 방법을 설명합니다.
프런트 엔드 요청에는 세 가지 방법이 있습니다.
1.양식
<form action='download.html' method='post'> <input type='submit'/> </form>
2.iframe
var iframe = "<iframe style='display:none' src='download.html'></iframe>" body.append(iframe);
iframe이 본문에 추가되면 다운로드 링크가 자동으로 요청됩니다.
3.열기
window.open("download.html");