JavaWeb 파일 업로드 시작 자습서
1. 파일 업로드의 전제 조건:
a,form 폼의method는post이어야 합니다
b.form 폼의 enctype는 multipart/form-data(POST 요청 방식을 결정하고 본문의 데이터 형식을 요청해야 함)
c,form에서 input를 제공하는 type은 파일 형식의 파일 업로드 영역입니다
둘째, 제3자 구성 요소를 이용하여 파일 업로드를 실현한다
1. commons-fileupload 구성 요소:
jar:commons-fileupload.jar
commons-io.jar
2, 코어 클래스 또는 인터페이스
DiskFileItemFactory: 환경 설정
public void setSizeThreshold(int sizeThreshold): 버퍼 크기를 설정합니다.기본값은 10Kb입니다.
업로드된 파일이 버퍼 크기를 초과하면 fileupload 구성 요소는 임시 파일 캐시를 사용하여 파일을 업로드합니다
public void setRepository (java.io.File repository): 임시 파일의 저장 디렉터리를 설정합니다.기본값은 시스템의 임시 파일 저장 디렉터리입니다.
ServletFileUpload: 핵심 업로드 클래스(주요 역할: 요청의 본문 내용 해석)
boolean is MultipartContent(Http ServletRequest?request): 사용자의 폼의 enctype가 multipart/form-data 형식인지 판단합니다.
List parseRequest(HttpServletRequest request): 요청 본문의 내용 해석
setFileSizeMax(4*1024*1024);//단일 업로드 파일 크기 설정
upload.setSizeMax(6*1024*1024);//총 파일 크기 설정
FileItem: 양식의 입력 도메인을 나타냅니다.
boolean isFormField(): 일반 필드인지 여부
String getFieldName: 일반 필드의 필드 이름 가져오기
String getString(): 일반 필드 값 가져오기
InputStream getInputStream(): 업로드 필드의 입력 스트림 가져오기
String getName(): 업로드된 파일 이름 가져오기
실례: 먼저 WEB-INF 디렉터리 아래에 files 폴더를 만듭니다. 즉, 파일이 여기에 업로드되고 다른 사람이 직접 접근하지 않도록 해야 합니다.
1. 파일의 실제 경로 가져오기
String storePath = getServletContext().getRealPath("/WEB-INF/files");
2. 환경 설정
DiskFileItemFactory factory = new DiskFileItemFactory();//기본 캐시와 임시 파일로 저장된 곳
3. 표 전송 방식 판단
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(!isMultipart)
{
System.out.println(" !");
return;
}
4. 파일 업로드 핵심 클래스
ServletFileUpload upload = new ServletFileUpload(factory);5.
//
List<FileItem> items = upload.parseRequest(request);
for(FileItem item: items)
{
if(item.isFormField()){// ,
String fieldName = item.getFieldName();//
String fieldValue = item.getString(); //
System.out.println(fieldName+"="+fieldValue);
}else//
{
InputStream in = item.getInputStream();
// C:\Users\Administrator\Desktop\a.txt
String name = item.getName(); // a.txt
String fileName = name.substring(name.lastIndexOf("\\")+1);
//
String storeFile = storePath+"\\"+fileName;//
OutputStream out = new FileOutputStream(storeFile);
byte[] b = new byte[1024];
int len = -1;
while((len=in.read(b))!=-1)
{
out.write(b, 0, len);
}
in.close();//
out.close();
}
}
양식을 하나 쓰다
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP '1.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="${pageContext.request.contextPath}/servlet/UploadServlet2" method="post" enctype="multipart/form-data">
<input type="text" name="username"/> <br/>
<input type="file" name="f1"/><br/>
<input type="file" name="f2"/><br/>
<input type="submit" value=" "/>
</form>
</body>
</html>
제출 servlet: Upload Servlet2 작성
package com.liuzhen.upload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
//
public class UploadServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
try {
//
String storePath = getServletContext().getRealPath("/WEB-INF/files");
//
DiskFileItemFactory factory = new DiskFileItemFactory();
// form enctype=multipart/form-data
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(!isMultipart)
{
System.out.println(" !");
return;
}
ServletFileUpload upload = new ServletFileUpload(factory);
//
List<FileItem> items = upload.parseRequest(request);
for(FileItem item: items)
{
if(item.isFormField()){// ,
String fieldName = item.getFieldName();//
String fieldValue = item.getString(); //
System.out.println(fieldName+"="+fieldValue);
}else//
{
InputStream in = item.getInputStream();
// C:\Users\Administrator\Desktop\a.txt
String name = item.getName(); // a.txt
String fileName = name.substring(name.lastIndexOf("\\")+1);
//
String storeFile = storePath+"\\"+fileName;//
OutputStream out = new FileOutputStream(storeFile);
byte[] b = new byte[1024];
int len = -1;
while((len=in.read(b))!=-1)
{
out.write(b, 0, len);
}
in.close();//
out.close();
}
}
} catch (FileUploadException e) {
throw new RuntimeException(e);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
업로드된 파일은 Tomcat 응용 프로그램에 있습니다.이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaWeb 파일 다운로드 기능 인스턴스 코드업무 중에 만난 파일을 다운로드하는 기능은 스스로 추출합니다. 코드가 간단합니다. 여러분에게 도움이 되었으면 합니다. 자, 말이 많지 않습니다. 코드를 올리십시오! 이상은 본고의 JavaWeb 파일을 다운로드한 코드...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.