簡單操作實現(xiàn)Java jsp servlet文件上傳過程解析
實現(xiàn)文件上傳的方式
1、進入http://commons.apache.org/proper/commons-fileupload/using.html
2、點擊用戶指南
3、對著用戶指南一步步復(fù)制粘貼,并把代碼擼成自己想要的樣子
補充:記得要將commons-io-2.4.jar和commons-fileupload-1.2.2.jar這兩個包放到編譯器里面

現(xiàn)成的代碼
JSP 前端頁面
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/10/8 Time: 16:14 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>作業(yè)三第1遍</title> </head> <body> 文件上傳注意事項:<br> <ol> <li>提交方式必須是post</li> <li>enctype="multipart/form-data"是以字節(jié)數(shù)據(jù)的形式提交表單,否則默認是kv形式,只會提交文件名</li> <li>如果以默認的application/x-www-form-urlencode的方式提交,上傳的就不是文件本身</li> </ol> <%--application/x-www-form-urlencoded 以鍵值對的方式上傳 --%> <%-- multipart/form-data 以二進制的方式上傳 --%> <form action="/work/UploadServlet" method="post" enctype="multipart/form-data"> <input type="text" name="data1" value="data1Value"> <hr> <input type="text" name="data2" value="data2Value"> <hr> <input type="file" name="dataFile"> <hr> <input type="submit" value="上傳該表單"> <hr> </form> </body> </html>
Servlet 后臺處理頁面
package com.bd25;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
@WebServlet(name = "UploadServlet", urlPatterns = "/UploadServlet")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//處理中文亂碼--已經(jīng)測試這個要不要無所謂
request.setCharacterEncoding("UTF-8");
//判斷是不是傳入的一個二進制的流
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
//創(chuàng)建一個簡單工廠實例
FileItemFactory factory = new DiskFileItemFactory();
//創(chuàng)建一個新的文件上傳處理程序
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request
try {
List<FileItem> fileItems = upload.parseRequest(request);
//處理上傳的項目
Iterator iter=fileItems.iterator();
while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if (item.isFormField()){
//普通域
processFormField(item);
}else{
//文件域 此處注意processUploadFile()方法的參數(shù)里面?zhèn)魅雛equest的目的是讓下面寫文件的時候獲取根目錄用的
processUploadFile(item,request);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
ServletInputStream inputStream = request.getInputStream();
byte[] bs=new byte[1024];
int total=-1;
while ((total=inputStream.read(bs))!=-1){
System.out.print(new String(bs,0,total));
}
}
/**
* 文件域
* @param item
* @param request
*/
private void processUploadFile(FileItem item, HttpServletRequest request) {
//獲取文件相關(guān)信息
String fileName="";
if (!item.isFormField()) {
String fieldName = item.getFieldName();
fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
System.out.println("文件名: "+fileName+" 文件屬性:"+fieldName+" 文件大?。?+sizeInBytes+" 文件類型:"+contentType);
}
//以下是轉(zhuǎn)存操作,找到儲存文件的根路徑
String fileRootPath=request.getServletContext().getRealPath("/WEB-INF/upload");
File dir = new File(fileRootPath);
if (!dir.exists()){
dir.mkdirs();
}
//寫文件
File file = new File(fileRootPath+"/"+fileName);
try {
item.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 普通域
* @param item
*/
private void processFormField(FileItem item) {
String key = item.getFieldName();
String value = null;
try {
//處理中文亂碼
value = item.getString("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(key+"----"+value);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.service(req, resp);
System.out.println("刷新....");
}
@Override
public void init() throws ServletException {
super.init();
System.out.println("初始化....");
}
}
運行結(jié)果
//說明:路徑出現(xiàn)的位置就是網(wǎng)頁發(fā)布的路徑

//說明:路徑出現(xiàn)的位置就是網(wǎng)頁發(fā)布的路徑

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)世界上最快的排序算法Timsort的示例代碼
Timsort?是一個混合、穩(wěn)定的排序算法,簡單來說就是歸并排序和二分插入排序算法的混合體,號稱世界上最好的排序算法。本文將詳解Timsort算法是定義與實現(xiàn),需要的可以參考一下2022-07-07
jenkins配置詳細指南(附j(luò)dk多個版本配置)
Jenkins是一款CICD(持續(xù)集成與持續(xù)交付)工具,Jenkins可以幫你在寫完代碼后,一鍵完成開發(fā)過程中的一系列自動化部署的工作,這篇文章主要給大家介紹了關(guān)于jenkins配置的相關(guān)資料,文中還附j(luò)dk多個版本配置指南,需要的朋友可以參考下2024-02-02
java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間
這篇文章主要為大家詳細介紹了java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12
java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別
這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下2017-08-08

