javaweb 파일 업로드 및 다운로드 기능 구현
파일 업로드
웹 개발 의 업로드 기능 을 실현 하려 면 보통 두 단계 작업 이 필요 합 니 다.하 나 는 웹 페이지 에 업로드 입력 항목 을 추가 하 는 것 입 니 다.둘 째 는 Servlet 에서 업로드 한 파일 의 데 이 터 를 읽 고 로 컬 하 드 디스크 에 저장 하 는 것 입 니 다.
업로드 의 대부분 상황 은 폼 형식 으로 서버 에 제출 하고 사용
<input type="file">
<input type="file">
라벨 을 사용 하려 면 다음 과 같은 두 가 지 를 주의해 야 합 니 다.1.
name
속성 을 설정 해 야 합 니 다.그렇지 않 으 면 브 라 우 저가 파일 을 업로드 하 는 데 이 터 를 보 내지 않 습 니 다.2.
method
속성 을post,ectype
속성 으로“multipart/form-data”
유형 으로 설정 해 야 합 니 다.Servlet 에서 업로드 데 이 터 를 직접 읽 고 해당 파일 데 이 터 를 분석 하 는 것 은 매우 번 거 로 운 작업 이기 때문이다.업로드 데 이 터 를 편리 하 게 처리 하기 위해 아파 치 조직 은 오픈 소스 구성 요소 인 Commons-FileUpload 를 제공 했다.이 구성 요 소 는
“multipart/form-data”
형식 이 요청 한 각종 폼 도 메 인 을 분석 하고 하나 이상 의 파일 업로드 도 가능 하 며 업로드 파일 의 크기 등 내용 도 제한 할 수 있 습 니 다.그 성능 은 매우 우수 하여 사용 이 매우 간단 하 다.그럼 실례 를 살 펴 보 겠 습 니 다.
우선,웹 프로젝트 를 만 들 고 소스 구성 요소 Commons-FileUpload 의 jar 패키지 두 개 를 가 져 옵 니 다.comons-fileupload-1.3.3.jar,comons-io-2.6.jar.
링크:다운로드 하 다.
업로드 페이지 업로드.html 만 들 기:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<!-- enctype multipart/form-data-->
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<table width="600">
<tr>
<td> </td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td> </td>
<td><input type="file" name="myfile"/></td>
</tr>
<tr>
<!-- 。-->
<td colspan="2"><input type="submit" value=" "/></td>
</tr>
</table>
</form>
</body>
</html>
Servlet 만 들 기:
package cn.itcast.fileupload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.UUID;
/**
* Created by lc on 2018/8/24.
*/
@WebServlet(name = "UploadServlet",urlPatterns = "/UploadServlet")
public class UploadSevlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
response.setContentType("text/html;charset=utf-8");
// DiskFileItemFactory
DiskFileItemFactory factory=new DiskFileItemFactory();
// ,
File f=new File("S:\\TempFolder");
if (!f.exists()){
f.mkdirs();
}
factory.setRepository(f);
// ServletFileUpload
ServletFileUpload fileUpload=new ServletFileUpload(factory);
//
fileUpload.setHeaderEncoding("utf-8");
// request, form FileItem
List<FileItem> fileItems = fileUpload.parseRequest(request);
//
PrintWriter writer=response.getWriter();
// List
for (FileItem fileItem:fileItems) {
//
if (fileItem.isFormField()){
//
String name = fileItem.getFieldName();
if(name.equals("name")){
//
if (!fileItem.getString().equals("")){
String value=fileItem.getString("utf-8");
writer.print(" :"+value+"<br />");
}
}
}
else {
//
String filename=fileItem.getName();
//
if(filename!=null&&filename!=""){
writer.print(" :"+filename+"<br />");
//
filename= UUID.randomUUID().toString()+"_"+filename;
String webpath="/upload/";
//
String filepath=getServletContext().getRealPath(webpath+filename);
// File
File file=new File(filepath);
//
file.getParentFile().mkdirs();
//
file.createNewFile();
//
InputStream in=fileItem.getInputStream();
// FileOutputStream
FileOutputStream out=new FileOutputStream(file);
//
byte[] bytes=new byte[1024];//
int len;
// ,
while ((len=in.read(bytes))>0)
out.write(bytes,0,len);
in.close();
out.close();
fileItem.delete();
writer.print(" !");
}
}
}
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
캡 처 실행:이로써 파일 업로드 기능 은 이미 실현 되 었 다.이때 프로젝트 발표 디 렉 터 리 에 들 어가 면 업 로드 된 파일 을 볼 수 있 습 니 다.다음 그림:
파일 다운로드
1.다운로드 페이지 download.html 만 들 기
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title> </title>
</head>
<body>
<a href="/Download?filename=1.jpg" rel="external nofollow" > </a>
</body>
</html>
2.Servlet 만 들 기
package cn.itcast.fileupload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Created by lc on 2018/8/24.
*/
@WebServlet(name = "DownloadServlet",urlPatterns = "/Download")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//
String filename = request.getParameter("filename");
//
String folder="/download/";
//
response.addHeader("Content-Type","application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename="+filename);
//
InputStream in=getServletContext().getResourceAsStream(folder+filename);
OutputStream out=response.getOutputStream();
byte[] bytes=new byte[1024];
int len=0;
while ((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
}
}
}
3.프로젝트 발표 디 렉 터 리 에 download 폴 더 를 만 들 고 폴 더 에 1.jpg 라 는 파일 을 설치 합 니 다.다음 그림:
캡 처 실행:
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Javaweb에서 양식 데이터를 가져오는 다양한 방법Javaweb에서 양식 데이터를 가져오는 몇 가지 방법 1. 키 값이 맞는 형식으로 폼 데이터를 얻는다 getParameter(String name): 키를 통해 value를 반환합니다. getParameterVal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.