java實現(xiàn)文件的上傳功能
更新時間:2022年01月29日 09:24:33 作者:我自是年少韶華傾負
這篇文章主要為大家詳細介紹了java實現(xiàn)文件的上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java實現(xiàn)文件的上傳功能的具體代碼,供大家參考,具體內容如下
直接上代碼了
一、上傳界面
<%@ 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> ? <!-- 文件上傳對表單的要求 ? 1、表單中的請求和提交的方式必須是post ? 2、 表單中應該指定提交的請求為multipart 請求 ,通過在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="注冊"> ? ? ?<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("當前不支持文件上傳"); ?? ??? ?} ?? ??? ?try { ?? ??? ??? ?DiskFileItemFactory factory=new DiskFileItemFactory(); ?? ??? ??? ? ?? ??? ??? ?//設置使用臨時文件的邊界值,大魚該值得文件上傳會先保存在臨時文件中,否則上傳文件會直接寫入到內存當中去 ?? ??? ??? ?//單位 字節(jié) 在這里設置的為1m ?? ??? ??? ?factory.setSizeThreshold(1024*1024*1); ?? ??? ??? ?//設置臨時文件 ?? ??? ??? ?String temppath=this.getServletContext().getRealPath("/temp"); ?? ??? ??? ?File file2=new File(temppath); ?? ??? ??? ?factory.setRepository(file2); ?? ??? ??? ?//創(chuàng)建文件上傳核心組件 ?? ??? ??? ?ServletFileUpload fileUpload=new ServletFileUpload(factory); ?? ??? ??? ?//設置單個文件的大小不超過多少 ?? ??? ??? ?fileUpload.setFileSizeMax(1024*1024*2); ?? ??? ??? ?//上傳多個文件的要求總的大小不超過多少 ?? ??? ??? ?fileUpload.setSizeMax(1024*1024*5); ?? ??? ??? ?fileUpload.setHeaderEncoding("utf-8"); ?? ??? ??? ?//設置每一個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 //如果是文件上傳表單項 ?? ??? ??? ??? ? { ?? ??? ??? ??? ??? ? String filename=fileItem.getName(); ?? ??? ??? ??? ??? ? InputStream inputStream=fileItem.getInputStream(); ?? ??? ??? ??? ??? ? //獲取表單項的輸入流 ?? ??? ??? ??? ??? ? 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(); ?? ??? ??? ??? ? ? ?//刪除臨時文件 ?? ??? ??? ??? ? ? ?fileItem.delete(); ?? ??? ??? ??? ? } ?? ??? ??? ?} ?? ??? ?} ?? ??? ?catch (Exception e) { ?? ??? ??? ?// TODO: handle exception ?? ??? ??? ?System.out.println(e); ?? ??? ?} ?? ?} ? }
三、實現(xiàn)結果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
MyBatis?Generator快速生成實體類和映射文件的方法
這篇文章主要介紹了MyBatis?Generator快速生成實體類和映射文件的方法,通過示例代碼介紹了MyBatis?Generator?的使用,本文結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-10-10IntelliJ?IDEA?2023.2最新版激活方法及驗證ja-netfilter配置是否成功
隨著2023.2版本的發(fā)布,用戶們渴望了解如何激活這個最新版的IDE,本文將介紹三種可行的激活方案,包括許可證服務器、許可證代碼和idea?vmoptions配置,幫助讀者成功激活并充分利用IDEA的功能,感興趣的朋友參考下吧2023-08-08Java中print、printf、println的區(qū)別
這篇文章主要介紹了Java中print、printf、println的區(qū)別的相關資料,需要的朋友可以參考下2023-03-03