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

idea圖片上傳保存實(shí)現(xiàn)方式

 更新時(shí)間:2026年01月05日 09:18:58   作者:努力學(xué)習(xí)的明  
文章介紹了一個(gè)改良版的register.jsp頁面項(xiàng)目結(jié)構(gòu)方案,在改良版本中,通過req.getServletContext().getRealPath("/upload")方法獲取路徑時(shí),可能會(huì)遇到獲取到war包下面的路徑問題,解決方法是在WEB-INF下創(chuàng)建一個(gè)classes文件,修改部署點(diǎn),選擇自己的web路徑,并刪除out文件

編寫一個(gè)register.jsp頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上傳</title>
</head>
<body>
<%-- 這里表單提交方式為post,并且enctype設(shè)置為"multipart/form-data"文件以二進(jìn)制的數(shù)據(jù)傳輸 --%>
<form action="/fileUpload" method="post" enctype="multipart/form-data">
    <p>用戶名:<input type="text" name="username" /></p>
    <p>頭像:<input type="file" name="headImg" /></p>
    <input type="submit" value="注冊(cè)">
</form>
<%-- 這里只是為了顯示我們上傳的圖片/upload目錄下面的favicon.jpg圖片 --%>
<img src="/upload/favicon.jpg" width="100px" >
</body>
</html>

項(xiàng)目結(jié)構(gòu)

方案一:簡單的上傳:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.util.Scanner;
//這里注意兩個(gè)類(FileUploadServlet 和 FileUploadServlet 2)的 運(yùn)行路徑都是/fileUpload所以不能兩個(gè)同時(shí)打開會(huì)有沖突
//@WebServlet("/fileUpload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("fileUpload");
        // 在文件上下傳中,無法通過常規(guī)方法獲取數(shù)據(jù)
        String username = req.getParameter("username");
        String headImg = req.getParameter("headImg");
/*      null:username
        null:headImg  獲取的結(jié)果都為null  需要加入特別的注解
        @MultipartConfig
        xim:username
        null:headImg 但是文件頭像還是無法獲取,因?yàn)槲募膫鬏斒嵌M(jìn)程傳輸
        System.out.println(username+":username");
        System.out.println(headImg+":headImg");*/

        //   方法一: 用流的方式讀取  但是這個(gè)方法讀取的都是亂碼,而且不能使用@MultipartConfig
/*        Scanner sc = new Scanner(req.getInputStream());
        while (sc.hasNextLine()){
            System.out.println(sc.nextLine());
        }*/

        //方法二:通過API獲取  開啟@MultipartConfig注解
        //普通控件數(shù)據(jù)還是使用 getParameter 方法來獲取
        System.out.println("username:" + req.getParameter("username"));
        //文件控件數(shù)據(jù)獲取 使用 Part類中的API獲取
        Part part = req.getPart("headImg");
        // 把得到的數(shù)據(jù)卸載磁盤上
        part.write("E:/headImg.jpg");
        //缺點(diǎn)路徑協(xié) 寫死 ,不靈活,改進(jìn)
    }
}

改良版

package servlet;


import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.UUID;

@WebServlet("/fileUpload")
@MultipartConfig
public class FileUploadServlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("fileUpload2");
       req.setCharacterEncoding("utf-8");
       resp.setCharacterEncoding("utf-8");

        // 文件控件數(shù)據(jù)獲取
        Part part = req.getPart("headImg");
        //通過getSubmittedFileName() 方法 得到提交的數(shù)據(jù)名稱 來獲取文件名
        //  但是得到得到名字是亂碼  所以要記得 設(shè)置req 和 resp 的編碼格式
        System.out.println(part.getSubmittedFileName());
        String filename = part.getSubmittedFileName();
        // 保存到磁盤上
//        part.write("E:/" + filename);

        //這里雖然,寫活了 但是會(huì)存在名字相同所以會(huì)覆蓋原內(nèi)容的情況
        //因此 文件的名字因該為不會(huì)重名,使用UUID 設(shè)置文件名
        //首先 :先獲取文件的后綴名
        String ext = filename.substring(filename.lastIndexOf("."));
        String uuidName =  UUID.randomUUID().toString() + ext;
        System.out.println(uuidName); //513904c8-24cc-4842-a4b5-ac3875072194.jpg
//        part.write("E:/"+uuidName);
        //缺點(diǎn)  還是路徑寫死不靈活,別人不一定要保存到E盤
        /*
            所以我們要保存到我們服務(wù)器中
                    直接放到web下,用來專門存放下載圖片
         */
        //將圖片保存到我們的upload 文件中
//        part.write("E:\\idea\\IdeaProjects\\SpringCloudProject-HEAD\\javaweb_010_02\\web\\upload\\"+uuidName);
       // 缺點(diǎn),路徑寫死不靈活,使用方法來獲取 upload的路徑位置
        System.out.println(req.getServletContext().getRealPath("/upload"));
/*
        但是現(xiàn)在獲取的路徑是out 下面的upload的路徑 改變項(xiàng)目的部署位置
        E:\\idea\\IdeaProjects\\SpringCloudProject-HEAD\\javaweb_010_02\\out\\artifacts\\javaweb_010_02_war_exploded\\upload

        改完之后 項(xiàng)目路徑為
        E:\\idea\\IdeaProjects\\SpringCloudProject-HEAD\\javaweb_010_02\\web\\upload
 */
        String realPath = req.getServletContext().getRealPath("/upload");
        //在重新寫進(jìn)去
        System.out.println(realPath + "\\" + uuidName);
        part.write(realPath+"\\"+uuidName);
        //自此 圖片的上傳結(jié)束
    }
}

在改良版本會(huì)遇到一個(gè)問題那就是通過 

req.getServletContext().getRealPath("/upload"); 方法獲取路徑的時(shí)候會(huì)遇到獲取到 war包下面的路徑問題也就是 out 下面 upload的路徑而不是我們項(xiàng)目中的自己的upload路徑

首先 先在 WEB-INF 下創(chuàng)建一個(gè)classes文件

然后需要改以下部署 點(diǎn)開旁面的文件夾

找到我們自己創(chuàng)建的classes路徑

在修改tomcat的部署環(huán)境

選擇我們自己web路徑

再把我們的out文件刪除即可

如果我們自己創(chuàng)建classes不會(huì)發(fā)黃 ,可以自己手動(dòng)讓他變黃

右鍵目錄

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring boot整合CAS配置詳解

    spring boot整合CAS配置詳解

    這篇文章主要介紹了spring boot整合CAS配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Springboot如何同時(shí)裝配兩個(gè)相同類型數(shù)據(jù)庫

    Springboot如何同時(shí)裝配兩個(gè)相同類型數(shù)據(jù)庫

    這篇文章主要介紹了Springboot如何同時(shí)裝配兩個(gè)相同類型數(shù)據(jù)庫,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot結(jié)合@validated優(yōu)化代碼驗(yàn)證

    Springboot結(jié)合@validated優(yōu)化代碼驗(yàn)證

    這篇文章主要介紹了Springboot與@validated注解結(jié)合從而實(shí)現(xiàn)讓你的代碼驗(yàn)證更清爽,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java Swing中的下拉式菜單(menu)、彈出式菜單(JPopupMenu)、選項(xiàng)卡窗體(JTabbedPane)組件使用案例

    Java Swing中的下拉式菜單(menu)、彈出式菜單(JPopupMenu)、選項(xiàng)卡窗體(JTabbedPane)

    這篇文章主要介紹了Java Swing中的下拉式菜單(menu)、彈出式菜單(JPopupMenu)、選項(xiàng)卡窗體(JTabbedPane)組件使用案例,需要的朋友可以參考下
    2014-10-10
  • java8 集合求差集、并集、交集的實(shí)例

    java8 集合求差集、并集、交集的實(shí)例

    下面小編就為大家分享一篇java8 集合求差集、并集、交集的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解Java枚舉類在生產(chǎn)環(huán)境中的使用方式

    詳解Java枚舉類在生產(chǎn)環(huán)境中的使用方式

    本文主要介紹了Java枚舉類在生產(chǎn)環(huán)境中的使用方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Spring Boot 注解 @SpringBootApplication的使用詳解

    Spring Boot 注解 @SpringBootApplication的使用詳解

    @SpringBootApplication 是 Spring Boot 提供的一個(gè)注解,通常用于啟動(dòng)類(主類)上,它是三個(gè)注解的組合,本文給大家介紹Spring Boot 注解 @SpringBootApplication的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-05-05
  • Spring?Security自定義認(rèn)證邏輯實(shí)例詳解

    Spring?Security自定義認(rèn)證邏輯實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Spring?Security自定義認(rèn)證邏輯的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java事件機(jī)制要素及實(shí)例詳解

    Java事件機(jī)制要素及實(shí)例詳解

    這篇文章主要介紹了Java事件機(jī)制要素及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • springboot項(xiàng)目引入外部jar包的詳細(xì)圖文教程

    springboot項(xiàng)目引入外部jar包的詳細(xì)圖文教程

    在項(xiàng)目中有時(shí)候需要引入外部jar包,啟動(dòng)運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于springboot項(xiàng)目引入外部jar包的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

三门峡市| 时尚| 阿坝县| 高雄县| 富蕴县| 延吉市| 凤城市| 临漳县| 乌兰察布市| 嘉黎县| 南宫市| 新绛县| 湖南省| 沁源县| 汉中市| 扶余县| 宜昌市| 子洲县| 泗阳县| 禄丰县| 新化县| 乳山市| 如东县| 沈阳市| 特克斯县| 资兴市| 北海市| 漳浦县| 浑源县| 甘肃省| 临高县| 南京市| 阳山县| 台东市| 新邵县| 庆安县| 廉江市| 革吉县| 卫辉市| 洪雅县| 平罗县|