欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javaweb使用getPart接收表單文件過程解析

 更新時(shí)間:2020年07月22日 15:09:08   作者:笑到不能自已  
這篇文章主要介紹了Javaweb使用getPart接收表單文件過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

使用getPart接收表單文件時(shí),注意Tomcat版本要在8之上。

前臺 : form.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/test" method="post" enctype="multipart/form-data">
  請選擇文件:<input type="file" name="file"><br>
  <input type="submit" value="提交">
</form>
</body>
</html>

后臺:TestServlet

@WebServlet(name = "TestServlet", urlPatterns = "/test")
@MultipartConfig
public class TestServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //獲取文件,參數(shù)為前臺的name
    Part part = request.getPart("photo");
    	//判斷是否選擇了文件
    if (part.getSize() == 0) {
      request.setAttribute("msg", "請選擇用戶頭像");
      request.getRequestDispatcher("/register.jsp").forward(request, response);
      return;	//不再執(zhí)行后續(xù)操作
    }
    //獲取文件名,獲取到文件名的格式如:a.jpg
    String fileName = part.getSubmittedFileName();
    /**
     截取文件名的后綴名:
     photo.lastIndexOf('.')的返回值為"."的位置,加1表示后綴名的起始位置。
     photo.substring(photo.lastIndexOf('.')+1),表示從后綴名的起始位置截取到結(jié)束位置。
     * */
    String fileType = fileName.substring(fileName.lastIndexOf('.') + 1);
    //判斷該文件是不是圖片格式
    if (!("jpg".equalsIgnoreCase(fileType) || "jpeg".equalsIgnoreCase(fileType) || "png".equalsIgnoreCase(fileType))) {
      //不是圖片格式,停止下一步,并將信息反饋給前臺頁面
      request.setAttribute("msg","上傳的文件必須為圖片");
      request.getRequestDispatcher("/form.jsp").forward(request, response);
      return;
    }
    //是圖片類型,構(gòu)建一個(gè)上傳圖片的存儲(chǔ)路徑
    String path = "E:\\upload";
    File file = new File(path);
    if (!file.exists()) {
      file.mkdirs(); //創(chuàng)建文件和文件夾
    }
    //將part內(nèi)容寫到文件夾內(nèi),生成一個(gè)文件
    part.write(path + "/" + fileName);
  }
}

String path = "E:\\testPic";設(shè)置成本地文件夾路徑與Tomcat服務(wù)器脫離關(guān)聯(lián),可以防止文件丟失。但需要將該文件夾掛載到Tomcat服務(wù)器。

掛載方式:Eclipse:

1、雙擊集成在Eclipse中的tomcat服務(wù)器

2、點(diǎn)擊添加額外的web資源

3、將本地存儲(chǔ)上傳文件的文件夾添加進(jìn)來即可!

一定要ctrl + S

IDEA:

優(yōu)化:將上傳圖片封裝成工具類

UploadUtils.java

public class UploadUtils {
  public static String upload(Part part, HttpServletRequest request, HttpServletResponse response) {
    //獲取文件的名稱
    String photo = part.getSubmittedFileName();
    //重命名該文件,防止出現(xiàn)重名文件被覆蓋的情況
    photo = UUID.randomUUID() + photo;
    /**
     截取文件名的后綴名:
     photo.lastIndexOf('.')的返回值為"."的位置,加1表示后綴名的起始位置。
     photo.substring(photo.lastIndexOf('.')+1),表示從后綴名的起始位置截取到結(jié)束位置。
     * */
    String fileType = photo.substring(photo.lastIndexOf('.') + 1);
    //判斷該文件是不是圖片格式
    if (!("jpg".equalsIgnoreCase(fileType) || "jpeg".equalsIgnoreCase(fileType) || "png".equalsIgnoreCase(fileType))) {
      //不是圖片格式,返回空字串
      return "";
    }
    //是圖片類型,構(gòu)建一個(gè)上傳圖片的存儲(chǔ)路徑,并返回字符串的名稱,用于存儲(chǔ)到數(shù)據(jù)庫
    String path = "E:\\upload";
    File file = new File(path);
    if (!file.exists()) {
      file.mkdirs(); //創(chuàng)建文件和文件夾
    }
    //將part內(nèi)容寫到文件夾內(nèi),生成一個(gè)文件
    try {
      part.write(path + "/" + photo);
    } catch (IOException e) {
      e.printStackTrace();
    }
    return photo;
  }
}

調(diào)用工具類:

@WebServlet(name = "TestServlet", urlPatterns = "/test")
@MultipartConfig
public class TestServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  //獲取文件
  Part part = request.getPart("photo");
  //判斷用戶是否選擇文件,如果沒有選擇頭像,不進(jìn)行后續(xù)操作
  if (part.getSize() == 0) {
    request.setAttribute("msg", "請選擇用戶頭像");
    request.getRequestDispatcher("/register.jsp").forward(request, response);
    return;
  }
  String photo = UploadUtils.upload(part, request, response);
  //判斷photo是否為空字符串,為空字符串,說明不是圖片類型,也不進(jìn)行后續(xù)操作
  if (photo == "") {
    request.setAttribute("msg", "請選擇圖片類型的文件,如png,jpg,jpeg");
    request.getRequestDispatcher("/register.jsp").forward(request, response);
    return;
  }
  //不是空字符串,執(zhí)行后續(xù)操作,如將路徑存儲(chǔ)到數(shù)據(jù)庫等
  ............................................
}

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

相關(guān)文章

  • IDEA報(bào)錯(cuò)java.lang.OutOfMemoryError:Java?heap?space的解決辦法

    IDEA報(bào)錯(cuò)java.lang.OutOfMemoryError:Java?heap?space的解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA報(bào)錯(cuò)java.lang.OutOfMemoryError:Java?heap?space的解決辦法,出現(xiàn)這個(gè)問題的主要原因是項(xiàng)目運(yùn)行時(shí)的堆內(nèi)存不足引起的報(bào)錯(cuò),需要的朋友可以參考下
    2024-02-02
  • Spring框架web項(xiàng)目實(shí)戰(zhàn)全代碼分享

    Spring框架web項(xiàng)目實(shí)戰(zhàn)全代碼分享

    這篇文章主要介紹了Spring框架web項(xiàng)目實(shí)戰(zhàn)全代碼分享,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java應(yīng)用程序的CPU使用率飆升原因詳細(xì)分析

    Java應(yīng)用程序的CPU使用率飆升原因詳細(xì)分析

    這篇文章主要介紹了Java應(yīng)用程序的CPU使用率飆升原因詳細(xì)分析,在 Java 中,我們使用 JVM 進(jìn)行線程調(diào)度,所以一般來說,線程的調(diào)度有兩種模式:分時(shí)調(diào)度和搶占式調(diào)度,線程和進(jìn)程在阻塞或者等待時(shí),都不會(huì)使用 CPU 資源,需要的朋友可以參考下
    2024-01-01
  • Java異常體系非正常停止和分類

    Java異常體系非正常停止和分類

    這篇文章主要介紹了Java異常體系非正常停止和分類,指的是程序在執(zhí)行過程中,出現(xiàn)的非正常的情況,最終會(huì)導(dǎo)致JVM的非正常停止更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-06-06
  • java安全?ysoserial?CommonsCollections1示例解析

    java安全?ysoserial?CommonsCollections1示例解析

    這篇文章主要介紹了java安全?ysoserial?CommonsCollections1示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java及nginx實(shí)現(xiàn)文件權(quán)限控制代碼實(shí)例

    Java及nginx實(shí)現(xiàn)文件權(quán)限控制代碼實(shí)例

    這篇文章主要介紹了Java及nginx實(shí)現(xiàn)文件權(quán)限控制代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java Jmeter全局變量設(shè)置過程圖解

    Java Jmeter全局變量設(shè)置過程圖解

    這篇文章主要介紹了Java Jmeter全局變量設(shè)置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 一文解決System.in關(guān)閉后無法再繼續(xù)使用流的問題

    一文解決System.in關(guān)閉后無法再繼續(xù)使用流的問題

    這篇文章主要給大家介紹如何解決System.in關(guān)閉后無法再繼續(xù)使用流的問題,文中有詳細(xì)的解決方法和代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • IDEA查看所有的斷點(diǎn)(Breakpoints)并關(guān)閉的方式

    IDEA查看所有的斷點(diǎn)(Breakpoints)并關(guān)閉的方式

    我們在使用IDEA開發(fā)Java應(yīng)用時(shí),基本上都需要進(jìn)行打斷點(diǎn)的操作,這方便我們排查BUG,也方便我們查看設(shè)計(jì)的是否正確,不過有時(shí)候,我們不希望進(jìn)入斷點(diǎn),所以我們需要快速關(guān)閉所有斷點(diǎn),故本文給大家介紹了IDEA查看所有的斷點(diǎn)(Breakpoints)并關(guān)閉的方式
    2024-10-10
  • SpringBoot實(shí)現(xiàn)多端口監(jiān)聽的代碼示例

    SpringBoot實(shí)現(xiàn)多端口監(jiān)聽的代碼示例

    當(dāng)你需要在同一個(gè)Spring Boot應(yīng)用中,通過不同的端口來提供不同的服務(wù)或功能時(shí),就需要實(shí)現(xiàn)多端口監(jiān)聽,所以本文給大家介紹了SpringBoot實(shí)現(xiàn)多端口監(jiān)聽的方法示例,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-09-09

最新評論