java實(shí)現(xiàn)文件的上傳功能
本文實(shí)例為大家分享了java實(shí)現(xiàn)文件的上傳功能的具體代碼,供大家參考,具體內(nèi)容如下
直接上代碼了
一、上傳界面
<%@ page language="java" contentType="text/html; charset=utf-8" ? ? pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> ? <!-- 文件上傳對(duì)表單的要求 ? 1、表單中的請(qǐng)求和提交的方式必須是post ? 2、 表單中應(yīng)該指定提交的請(qǐng)求為multipart 請(qǐng)求 ,通過在form表單中添加enctype屬性 ? ?為multipart/form-data ? ?3、表單中要有file元素 ? ? ?? ? ?--> ? <!-- ${pageContext.request.contextPath}/registerServlet --> ? <form action="${pageContext.request.contextPath }/registerServlet" method="post" enctype="multipart/form-data"> ? 姓名:<input type="text" name="name" /><br> ? <hr> ? 年齡:<input type="text" name="age" /><br> ? ? <hr> ? 照片 :<input type="file" name="photo"/> ? <br> ? ? <hr> ? ?<input type="submit" value="注冊(cè)"> ? ? ?<hr> ? </form> </body> </html>
二、Servlet處理
package com.ui.servlet; ? import java.io.File; 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.annotation.WebServlet; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.tomcat.jni.OS; ? import com.mysql.jdbc.Field; ? /** ?* Servlet implementation class RegisterServlet ?*/ @WebServlet("/registerServlet") public class RegisterServlet extends HttpServlet { ?? ?private static final long serialVersionUID = 1L; ? ?? ?/** ?? ? * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) ?? ? */ ?? ?protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ?? ??? ?// TODO Auto-generated method stub ?? ??? ?if(!ServletFileUpload.isMultipartContent(request)) ?? ??? ?{ ?? ??? ??? ?throw new RuntimeException("當(dāng)前不支持文件上傳"); ?? ??? ?} ?? ??? ?try { ?? ??? ??? ?DiskFileItemFactory factory=new DiskFileItemFactory(); ?? ??? ??? ? ?? ??? ??? ?//設(shè)置使用臨時(shí)文件的邊界值,大魚該值得文件上傳會(huì)先保存在臨時(shí)文件中,否則上傳文件會(huì)直接寫入到內(nèi)存當(dāng)中去 ?? ??? ??? ?//單位 字節(jié) 在這里設(shè)置的為1m ?? ??? ??? ?factory.setSizeThreshold(1024*1024*1); ?? ??? ??? ?//設(shè)置臨時(shí)文件 ?? ??? ??? ?String temppath=this.getServletContext().getRealPath("/temp"); ?? ??? ??? ?File file2=new File(temppath); ?? ??? ??? ?factory.setRepository(file2); ?? ??? ??? ?//創(chuàng)建文件上傳核心組件 ?? ??? ??? ?ServletFileUpload fileUpload=new ServletFileUpload(factory); ?? ??? ??? ?//設(shè)置單個(gè)文件的大小不超過多少 ?? ??? ??? ?fileUpload.setFileSizeMax(1024*1024*2); ?? ??? ??? ?//上傳多個(gè)文件的要求總的大小不超過多少 ?? ??? ??? ?fileUpload.setSizeMax(1024*1024*5); ?? ??? ??? ?fileUpload.setHeaderEncoding("utf-8"); ?? ??? ??? ?//設(shè)置每一個(gè)item的字符編碼為utf-8 ?? ??? ??? ? ?? ??? ??? ?List<FileItem> items=fileUpload.parseRequest(request); ?? ??? ??? ?for (FileItem fileItem : items) { ?? ??? ??? ??? ? if(fileItem.isFormField()) ?? ??? ??? ??? ? { ?? ??? ??? ??? ??? ? String filename=fileItem.getFieldName(); ?? ??? ??? ??? ??? ? String fileValue=fileItem.getString("utf-8"); ?? ??? ??? ??? ??? ? System.out.println(filename+"----"+fileValue); ?? ??? ??? ??? ??? ?? ?? ??? ??? ??? ? } ?? ??? ??? ??? ? else //如果是文件上傳表單項(xiàng) ?? ??? ??? ??? ? { ?? ??? ??? ??? ??? ? String filename=fileItem.getName(); ?? ??? ??? ??? ??? ? InputStream inputStream=fileItem.getInputStream(); ?? ??? ??? ??? ??? ? //獲取表單項(xiàng)的輸入流 ?? ??? ??? ??? ??? ? String path=this.getServletContext().getRealPath("/fileContents"); ?? ??? ??? ??? ? ? ?File file=new File(path,filename); ?? ??? ??? ??? ? ? ?OutputStream outputStream=new FileOutputStream(file); ?? ??? ??? ??? ? ? ?int len=-1; ?? ??? ??? ??? ? ? ?byte[] bs=new byte[1024]; ?? ??? ??? ??? ? ? ?while((len=inputStream.read(bs))!=-1) ?? ??? ??? ??? ? ? ??? ??? ?{ ?? ??? ??? ??? ? ? ??? ? ?? ??? ??? ??? ? ? ??? ?outputStream.write(bs,0,len); ?? ??? ??? ??? ? ? ??? ? ?? ??? ??? ??? ? ? ??? ? ?? ??? ??? ??? ? ? ??? ??? ?} ?? ??? ??? ??? ? ? ?outputStream.close(); ?? ??? ??? ??? ? ? ?inputStream.close(); ?? ??? ??? ??? ? ? ?//刪除臨時(shí)文件 ?? ??? ??? ??? ? ? ?fileItem.delete(); ?? ??? ??? ??? ? } ?? ??? ??? ?} ?? ??? ?} ?? ??? ?catch (Exception e) { ?? ??? ??? ?// TODO: handle exception ?? ??? ??? ?System.out.println(e); ?? ??? ?} ?? ?} ? }
三、實(shí)現(xiàn)結(jié)果
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis?Generator快速生成實(shí)體類和映射文件的方法
這篇文章主要介紹了MyBatis?Generator快速生成實(shí)體類和映射文件的方法,通過示例代碼介紹了MyBatis?Generator?的使用,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10IntelliJ?IDEA?2023.2最新版激活方法及驗(yàn)證ja-netfilter配置是否成功
隨著2023.2版本的發(fā)布,用戶們渴望了解如何激活這個(gè)最新版的IDE,本文將介紹三種可行的激活方案,包括許可證服務(wù)器、許可證代碼和idea?vmoptions配置,幫助讀者成功激活并充分利用IDEA的功能,感興趣的朋友參考下吧2023-08-08Java將不同的List集合復(fù)制到另一個(gè)集合常見的方法
在Java中,有時(shí)候我們需要將一個(gè)List對(duì)象的屬性值復(fù)制到另一個(gè)List對(duì)象中,使得兩個(gè)對(duì)象的屬性值相同,這篇文章主要介紹了Java將不同的List集合復(fù)制到另一個(gè)集合常見的方法,需要的朋友可以參考下2024-09-09spring boot中使用http請(qǐng)求的示例代碼
本篇文章主要介紹了spring boot中 使用http請(qǐng)求的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12Java中print、printf、println的區(qū)別
這篇文章主要介紹了Java中print、printf、println的區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-03-03Java如何獲取Json中的數(shù)據(jù)實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Java如何獲取Json中數(shù)據(jù)的相關(guān)資料,我們?cè)谌粘i_發(fā)中少不了和JSON數(shù)據(jù)打交道,那么我們來看看JAVA中常用的JSON獲取方式,需要的朋友可以參考下2023-09-09Java selenium處理極驗(yàn)滑動(dòng)驗(yàn)證碼示例
本篇文章主要介紹了Java selenium處理極驗(yàn)滑動(dòng)驗(yàn)證碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10