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

JavaWeb簡單文件上傳流程的實(shí)戰(zhàn)記錄

 更新時(shí)間:2022年03月31日 11:10:49   作者:See-L  
在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,下面這篇文章主要給大家介紹了關(guān)于JavaWeb實(shí)現(xiàn)簡單文件上傳流程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

這里實(shí)現(xiàn)一個(gè)簡單的圖片上傳功能,主要是熟悉這個(gè)文件上傳的交互流程。關(guān)于更復(fù)雜的文件上傳,如大文件的切片上傳、斷點(diǎn)續(xù)傳等,這里不做過多介紹。

前端上傳文件

首先在前端創(chuàng)建一個(gè)頁面,這里我們選擇通過form表單的形式上傳文件。在選擇時(shí),使用input標(biāo)簽中 的file類型就可以自動的選擇本地文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上傳一張圖片</title>
</head>
<body>
<form action="upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="MyImage">
    <input type="submit" value="提交圖片">
</form>
</body>
</html>

代碼解釋

  • 在form標(biāo)簽中,action屬性后寫入表單數(shù)據(jù)上傳的URL地址,如果不寫,默認(rèn)上傳到當(dāng)前頁面,這里我們寫成服務(wù)器解析的地址@WebServlet("/upload")。
  • method屬性中我們設(shè)為POST方法,即提交表單數(shù)據(jù)的方法,也就是前面我們說的構(gòu)造HTTP請求的方法,并且POST傳輸?shù)臄?shù)據(jù)量大,可視為不受限制。
  • enctype=“multipart/form-data”,這個(gè)屬性的作用是將表單數(shù)據(jù)編碼格式置為multipart/form-data類型,這個(gè)編碼類型會對文件內(nèi)容在上傳時(shí)進(jìn)行處理,以便服務(wù)器解析文件的類型和內(nèi)容。

enctype屬性:
application/x-www=form-urlencoded:默認(rèn)方式,只處理表單域中的 value 屬性值,將表單域中的值處理成 URL 編碼方式;
multipart/form-data:以二進(jìn)制流的方式處理表單數(shù)據(jù),除了表單域中的 value 屬性值,還會處理表單域的文件內(nèi)容,將其封裝到請求參數(shù)中,不會對字符編碼;
text/plain:將空格轉(zhuǎn)換為+號,其它字符不做編碼處理,適用于通過表單發(fā)送郵件。

小結(jié)

  • 前端文件上傳實(shí)際是文件內(nèi)容的傳遞,是數(shù)據(jù)的傳遞,并非我們常用的文件的拷貝與復(fù)制操作。
  • 傳遞的過程中藥進(jìn)行編碼來制定數(shù)據(jù)發(fā)送的規(guī)則,方便后端能夠?qū)崿F(xiàn)一套對應(yīng)的解析規(guī)則來解析。
  • 傳遞的數(shù)據(jù)規(guī)則里面應(yīng)該包含文件的基本信息,如文件名和文件類型,方便后端解析時(shí)能寫出正確格式的文件。

后端接受文件

在服務(wù)器這邊處理請求,并將請求中的文件取出并重新保存,最后將代碼部署到Tomcat上.

在解析請求中的文件時(shí),需要用到Servlet中的getPart方法.此方法的參數(shù)是對應(yīng)的文件名name

在前端上傳文件的時(shí)候,可以一次選擇多個(gè)文件上傳,其中每個(gè)文件,會被包裝成一個(gè)Part對象.每個(gè)文件都會有自己的文件名name,服務(wù)器這邊就可以根據(jù)文件名來找到對應(yīng)的Part,在Part中就包含了對應(yīng)文件信息。

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;
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.從請求對象中,讀取出Part對象
        Part part =req.getPart("MyImage");
        //2.讀取到Part 對象中的一些參數(shù)
        System.out.println(part.getSubmittedFileName()); // 上傳文件真實(shí)的文件名
        System.out.println(part.getContentType()); // 文件的類型
        System.out.println(part.getSize()); // 文件的大小

        //3.把文件寫入到指定的目錄中
        part.write("c:/temp/MyImage.jpg");
        //4.返回一個(gè)響應(yīng),通知用戶上傳成功
        resp.getWriter().write("upload OK !");
    }
}

代碼解釋:

  • 接受文件上傳的Servlet,必須有@MultipartConfig注解,否則Servlet不能正確的讀取請求中的文件內(nèi)容
  • @WebServlet("/upload")這里的/upload和前端form標(biāo)簽中的action屬性的值upload正好對應(yīng)了起來。action屬性會將form表單中的數(shù)據(jù)發(fā)送到對應(yīng)的URL中,前端將URL設(shè)為upload,那么后端在構(gòu)造url的時(shí)候也必須和前端的對應(yīng)起來。否則訪問不了Tomcat.
  • 在Servlet中重寫的具體是哪個(gè)方法也要和前端method屬性對應(yīng)起來,前端用的是Post方法,那么后端在Servlet中重寫的就是doPost方法.
  • 在重寫的方法中,我們首先要通過文件名name獲取到對應(yīng)的Part對象。前端文件名是MyImage,那么這里的參數(shù)就必須是MyImage。
  • 獲得對象后,就可以通過Servlet內(nèi)置的一些方法來獲得文件的參數(shù)信息,例如文件名,文件類型,文件大小等。
  • 然后通過part.write()方法使文件持久化,也就是將文件保存下來,寫入指定的目錄中。這個(gè)方法的參數(shù)就是想要保存的路徑
  • 最后可以返回一個(gè)響應(yīng),通知客戶端上傳成功。

在瀏覽器中輸入U(xiǎn)RL,發(fā)送請求,開始上傳文件

上傳成功

在本地對應(yīng)的路徑中,可以看到被上傳的文件

總結(jié) 

到此這篇關(guān)于JavaWeb簡單文件上傳的文章就介紹到這了,更多相關(guān)JavaWeb文件上傳流程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot異步使用@Async的原理以及線程池配置詳解

    SpringBoot異步使用@Async的原理以及線程池配置詳解

    在項(xiàng)目中當(dāng)訪問其他人的接口較慢時(shí),不想程序一直卡在耗時(shí)任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線程來并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async,這篇文章主要給大家介紹了關(guān)于SpringBoot異步使用@Async的原理以及線程池配置的相關(guān)資料
    2021-09-09
  • 解決報(bào)java.lang.AssertionError錯(cuò)誤的問題

    解決報(bào)java.lang.AssertionError錯(cuò)誤的問題

    這篇文章主要介紹了解決報(bào)java.lang.AssertionError錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringBoot實(shí)現(xiàn)初始化的三種策略模式

    SpringBoot實(shí)現(xiàn)初始化的三種策略模式

    本文主要介紹了SpringBoot實(shí)現(xiàn)初始化的三種策略模式,包括默認(rèn)初始化策略、懶加載初始化策略和自定義初始化策略,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • mybatis利用association或collection傳遞多參數(shù)子查詢

    mybatis利用association或collection傳遞多參數(shù)子查詢

    今天小編就為大家分享一篇關(guān)于mybatis利用association或collection傳遞多參數(shù)子查詢,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java中的OpenTracing使用實(shí)例

    Java中的OpenTracing使用實(shí)例

    這篇文章主要介紹了Java中的OpenTracing使用實(shí)例,主要的OpenTracing API將所有主要組件聲明為接口以及輔助類,例如Tracer,Span,SpanContext,Scope,ScopeManager,Format(用映射定義通用的SpanContext注入和提取格式),需要的朋友可以參考下
    2024-01-01
  • Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO

    Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO

    這篇文章主要介紹了Spring Data Jpa實(shí)現(xiàn)自定義repository轉(zhuǎn)DTO,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解

    Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解

    這篇文章主要為大家介紹了Apache?SkyWalking?修復(fù)TTL?timer?失效bug詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • MyEclipse到期破解代碼分享

    MyEclipse到期破解代碼分享

    前幾天有個(gè)小伙伴咨詢,使用的時(shí)候一直說myeclipse已過期,需要購買,如何解決?可以去網(wǎng)上搜搜注冊碼,但作為程序猿這么做簡直太無趣,看看我們自己來解決這個(gè)問題
    2014-11-11
  • Jackson序列化和反序列化忽略字段操作

    Jackson序列化和反序列化忽略字段操作

    這篇文章主要介紹了Jackson序列化和反序列化忽略字段操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • idea2020.3測試評價(jià)及感受

    idea2020.3測試評價(jià)及感受

    idea2020.3版本這次變化最大的也就是 UI了完全拋棄了之前一直使用的模板更改成了新的樣式,感興趣的朋友快來下載體驗(yàn)下吧
    2020-10-10

最新評論

宣武区| 平昌县| 高台县| 专栏| 龙门县| 深水埗区| 进贤县| 喜德县| 河间市| 东平县| 石林| 武清区| 忻州市| 卢龙县| 南陵县| 福清市| 桓台县| 浦城县| 辽宁省| 保定市| 四会市| 山阴县| 青海省| 盐源县| 宁明县| 德令哈市| 贺州市| 云林县| 兰坪| 建德市| 竹溪县| 芒康县| 鹿泉市| 肇源县| 涟源市| 三原县| 汽车| 旅游| 南靖县| 衡山县| 舞钢市|