最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb實現(xiàn)簡單上傳文件功能

 更新時間:2022年06月22日 12:10:47   作者:歸酒  
這篇文章主要為大家詳細(xì)介紹了JavaWeb實現(xiàn)簡單上傳文件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了JavaWeb實現(xiàn)上傳文件功能的具體代碼,供大家參考,具體內(nèi)容如下

基本思想:網(wǎng)站服務(wù)器的內(nèi)部除了有Web應(yīng)用,還有文件系統(tǒng),客戶端向網(wǎng)站上傳文件就是將文件以流的形式傳輸給了服務(wù)器,如圖所示:

注意事項:

1、為保證服務(wù)器的安全,上傳的文件路徑應(yīng)放在外界不能直接訪問的目錄下,比如WEB-INF目錄下。
2、因為服務(wù)器的文件系統(tǒng)大小有限,上傳的文件大小必須要有限制。
3、為防止因為文件名重復(fù)而導(dǎo)致文件覆蓋,應(yīng)當(dāng)給上傳的文件夾生成唯一的標(biāo)識,比如時間戳、UUID或者md5加密。
4、可以限制上傳文件的類型,在收到文件的時候,判斷文件后綴是否合法。

在JavaWeb中,一般我們使用ServletFileUpload類來處理上傳的文件數(shù)據(jù),它使用parseRequest方法將表單的每一個輸入項封裝成一個FileItem對象,并以list的形式返回,處理數(shù)據(jù)比較簡短,方便。

下面是一個上傳文件的小demo,編輯器是IDEA,項目類型是Maven Webapp。

package com.xiaojing.servlet;

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;

import javax.servlet.ServletException;
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;

public class FileUploadServlet extends HttpServlet {
? ? @Override
? ? protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
? ? ? ? //判斷表單是普通表單,還是上傳文件表單
? ? ? ? if(!ServletFileUpload.isMultipartContent(req)){
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? //創(chuàng)建上傳文件的路徑,一般放在/WEB-INF下,比較安全
? ? ? ? String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");
? ? ? ? File uploadFile = new File(uploadPath);
? ? ? ? if(!uploadFile.exists()){
? ? ? ? ? ? uploadFile.mkdir();
? ? ? ? }
? ? ? ? //如果上傳的文件大小超過了限制,那么會將這個文件放在臨時文件夾,過段時間提醒用戶刪除或者轉(zhuǎn)為永久
? ? ? ? String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
? ? ? ? File tempFile = new File(tempPath);
? ? ? ? if(!tempFile.exists()){
? ? ? ? ? ? tempFile.mkdir();
? ? ? ? }

? ? ? ? //1、創(chuàng)建DiskFileItemFactory對象
? ? ? ? DiskFileItemFactory factory = new DiskFileItemFactory();
? ? ? ? //2、獲取ServletFileUpload對象
? ? ? ? ServletFileUpload upload = new ServletFileUpload();
? ? ? ? upload.setFileItemFactory(factory);
? ? ? ? //3、處理上傳文件
? ? ? ? ? ? //將前端請求封裝成Fileitem對象,每一個表單輸入項都是一個Fileitem對象
? ? ? ? try {
? ? ? ? ? ? List<FileItem> items = upload.parseRequest(req);
? ? ? ? ? ? for (FileItem item: items) {
? ? ? ? ? ? ? ? if(item.isFormField()){ //如果是普通的表單
? ? ? ? ? ? ? ? ? ? //getFieldName()是input的name屬性,getString()是input的value屬性
? ? ? ? ? ? ? ? ? ? String fieldName = item.getFieldName();
? ? ? ? ? ? ? ? ? ? String value = item.getString("UTF-8");
? ? ? ? ? ? ? ? ? ? System.out.println(fieldName + ":" +value);
? ? ? ? ? ? ? ? }else{ ?//上傳文件的表單
? ? ? ? ? ? ? ? ? ? //---------------處理文件------------------//
? ? ? ? ? ? ? ? ? ? String uploadFileName = item.getName();
? ? ? ? ? ? ? ? ? ? System.out.println("上傳的文件名:"+uploadFileName);
? ? ? ? ? ? ? ? ? ? if(uploadFileName == null || uploadFileName.trim().equals("")){
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? //獲取fileName文件名,uploadFileName一般是url/文件路徑/文件
? ? ? ? ? ? ? ? ? ? String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("\\")+1);
? ? ? ? ? ? ? ? ? ? //獲取文件后綴
? ? ? ? ? ? ? ? ? ? String fileExt = uploadFileName.substring(uploadFileName.lastIndexOf(".")+1);
? ? ? ? ? ? ? ? ? ? System.out.println("文件信息:"+fileName);

? ? ? ? ? ? ? ? ? ? //---------------處理地址-----------------//
? ? ? ? ? ? ? ? ? ? //使用UUID唯一標(biāo)識存放文件夾
? ? ? ? ? ? ? ? ? ? String uuidPath = UUID.randomUUID().toString();
? ? ? ? ? ? ? ? ? ? //獲取真實的文件夾地址
? ? ? ? ? ? ? ? ? ? String realPath = uploadPath + "/" + uuidPath;
? ? ? ? ? ? ? ? ? ? File realFile = new File(realPath);
? ? ? ? ? ? ? ? ? ? if(!realFile.exists()){
? ? ? ? ? ? ? ? ? ? ? ? realFile.mkdir();
? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? //---------------處理文件流-----------------//
? ? ? ? ? ? ? ? ? ? //獲取文件上傳的流
? ? ? ? ? ? ? ? ? ? InputStream inputStream = item.getInputStream();
? ? ? ? ? ? ? ? ? ? //創(chuàng)建一個文件輸出流
? ? ? ? ? ? ? ? ? ? FileOutputStream outputStream = new FileOutputStream(realFile + "/" + fileName);
? ? ? ? ? ? ? ? ? ? //創(chuàng)建一個緩沖區(qū)
? ? ? ? ? ? ? ? ? ? byte[] buffer = new byte[1024 * 1024];
? ? ? ? ? ? ? ? ? ? int len = 0;
? ? ? ? ? ? ? ? ? ? while((len = inputStream.read(buffer)) > 0){ //每次讀寫1M
? ? ? ? ? ? ? ? ? ? ? ? outputStream.write(buffer,0,len);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? outputStream.close();
? ? ? ? ? ? ? ? ? ? inputStream.close();

? ? ? ? ? ? ? ? ? ? String msg = "文件上傳成功";
? ? ? ? ? ? ? ? ? ? System.out.println("文件上傳成功");
? ? ? ? ? ? ? ? ? ? //清除臨時文件
? ? ? ? ? ? ? ? ? ? item.delete();
? ? ? ? ? ? ? ? ? ? //轉(zhuǎn)發(fā)
? ? ? ? ? ? ? ? ? ? req.setAttribute("msg",msg);
? ? ? ? ? ? ? ? ? ? req.getRequestDispatcher("index.jsp").forward(req,resp);

? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (FileUploadException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? }

? ? @Override
? ? protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
? ? ? ? doGet(req, resp);
? ? }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot+Redis?BitMap實現(xiàn)簽到與統(tǒng)計的項目實踐

    SpringBoot+Redis?BitMap實現(xiàn)簽到與統(tǒng)計的項目實踐

    最近項目里需要集成簽到和統(tǒng)計功能,連續(xù)簽到后會給用戶發(fā)放一些優(yōu)惠券和獎品,以此來吸引用戶持續(xù)在該品臺進行活躍,本文就詳細(xì)的介紹一下如何實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • java 字符串池的深入理解

    java 字符串池的深入理解

    這篇文章主要介紹了java 字符串池的深入理解的相關(guān)資料,這里提供實例代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,希望大家能夠掌握,需要的朋友可以參考下
    2017-08-08
  • Java面試題及答案集錦(基礎(chǔ)題122道,代碼題19道)

    Java面試題及答案集錦(基礎(chǔ)題122道,代碼題19道)

    本文是小編收集整理的關(guān)于java基礎(chǔ)面試題及答案集錦,基礎(chǔ)題目有122道,代碼題目有19道,非常不錯,值得收藏,需要的朋友參考下
    2017-01-01
  • springsecurity實現(xiàn)攔截器的使用示例

    springsecurity實現(xiàn)攔截器的使用示例

    Spring Security 可以替代攔截器,同時還可以提供更加細(xì)粒度的權(quán)限控制和身份認(rèn)證,本文就來介紹一下springsecurity實現(xiàn)攔截器的使用示例,感興趣的可以了解一下
    2023-10-10
  • javaSE基礎(chǔ)java自定義注解原理分析

    javaSE基礎(chǔ)java自定義注解原理分析

    這篇文章主要介紹了javaSE基礎(chǔ)對java自定義注解原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多度進步,早日升職加薪
    2021-10-10
  • 解決springboot configuration processor對maven子模塊不起作用的問題

    解決springboot configuration processor對maven子模塊不起作用的問題

    這篇文章主要介紹了解決springboot configuration processor對maven子模塊不起作用的問題,本文通過圖文實例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot項目實現(xiàn)關(guān)閉數(shù)據(jù)庫配置和springSecurity

    SpringBoot項目實現(xiàn)關(guān)閉數(shù)據(jù)庫配置和springSecurity

    這篇文章主要介紹了SpringBoot項目實現(xiàn)關(guān)閉數(shù)據(jù)庫配置和springSecurity的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java實現(xiàn)利用String類的簡單方法讀取xml文件中某個標(biāo)簽中的內(nèi)容

    java實現(xiàn)利用String類的簡單方法讀取xml文件中某個標(biāo)簽中的內(nèi)容

    下面小編就為大家?guī)硪黄猨ava實現(xiàn)利用String類的簡單方法讀取xml文件中某個標(biāo)簽中的內(nèi)容。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Spring MVC中處理ajax請求的跨域問題與注意事項詳解

    Spring MVC中處理ajax請求的跨域問題與注意事項詳解

    跨域問題是我們大家在開發(fā)中會經(jīng)常遇到的一個問題,所以下面這篇文章主要給大家介紹了關(guān)于Spring MVC中處理ajax請求的跨域問題與注意事項的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • springboot如何開啟緩存@EnableCaching(使用redis)

    springboot如何開啟緩存@EnableCaching(使用redis)

    在Spring Boot項目中集成Redis主要包括添加依賴到pom.xml、配置application.yml中的Redis連接參數(shù)、編寫配置類、在啟動類上添加@EnableCaching注解以及測試接口的查詢和緩存驗證等步驟,首先,需要在pom.xml中添加spring-boot-starter-data-redis依賴
    2024-11-11

最新評論

汨罗市| 邯郸市| 九龙城区| 房产| 柳河县| 新绛县| 神木县| 固原市| 那曲县| 长泰县| 泸州市| 共和县| 光山县| 昂仁县| 南京市| 宜宾市| 大方县| 和林格尔县| 磐安县| 西峡县| 苍梧县| 左贡县| 萨嘎县| 龙州县| 巴东县| 光泽县| 和林格尔县| 墨竹工卡县| 四平市| 昌平区| 科技| 金门县| 东山县| 七台河市| 土默特左旗| 平湖市| 绥德县| 讷河市| 鄱阳县| 扎囊县| 彩票|