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

JavaWeb實(shí)現(xiàn)文件上傳功能詳解

 更新時(shí)間:2022年02月10日 09:39:55   作者:「已注銷(xiāo)」  
這篇文章主要介紹了JavaWeb實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

文件上傳功能的實(shí)現(xiàn)

在大多數(shù)網(wǎng)站中,我們都可以看見(jiàn)文件上傳和下載功能的實(shí)現(xiàn),今天我們就文件上傳做一個(gè)詳細(xì)的總結(jié)

實(shí)現(xiàn)步驟:

1、新建一個(gè)JSP頁(yè)面:表單必須設(shè)置:enctype="multipart/form-data"參數(shù) upload.jsp:

<form action="" method="post" enctype="multipart/form-data">
<!--accept=".txt"標(biāo)簽用來(lái)確定上傳的文件默認(rèn)類(lèi)型-->
請(qǐng)選擇您要上傳的文件:<input type="file" name="fileName" accept=".txt" ?/> <br/>
確認(rèn)上傳?<input type="submit" value="確認(rèn)" /><input type="reset" value="重選" />
</form>

2、編寫(xiě)后端功能Servlet代碼:

UploadFile.java:

具體實(shí)現(xiàn)思路:

--------1、設(shè)置編碼方式為utf-8,獲取字符流
--------2、創(chuàng)建DiskFileItemFactory工廠類(lèi)對(duì)象,將文件封裝成單獨(dú)的FileItem對(duì)象
--------3、設(shè)置文件緩存目錄
--------4、加載文件緩存目錄,創(chuàng)建ServletFileUpload對(duì)象
--------5、設(shè)置文件編碼為utf-8
--------6、解析request請(qǐng)求,得到上傳文件的FileItem對(duì)象,得到的也就是所有的表單name
--------7、遍歷表單name集合,判斷哪一些是普通字段和文件字段,進(jìn)行區(qū)分
--------8、得到所上傳的文件路徑名
--------9、截取文件名
--------10、設(shè)置上傳的目標(biāo)文件夾路徑
--------11、通過(guò)字節(jié)流進(jìn)行文件的對(duì)拷

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1、設(shè)置編碼方式為utf-8,獲取字符流
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter write = response.getWriter();
//2、創(chuàng)建DiskFileItemFactory工廠類(lèi)對(duì)象,將文件封裝成單獨(dú)的FileItem對(duì)象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//3、設(shè)置文件緩存目錄
File file = new File("C:\\Cache");
?? ??? ?if(!file.exists()) {
?? ??? ??? ?//如果文件不存在,就創(chuàng)建一個(gè)文件
?? ??? ??? ?file.mkdirs();
?? ??? ?}
?? ??? ?diskFileItemFactory.setRepository(file); ? ? ? ? //加載文件緩存目錄
//4、創(chuàng)建ServletFileUpload對(duì)象
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
//5、設(shè)置文件編碼為utf-8
fileUpload.setHeaderEncoding("utf-8");
//6、解析request請(qǐng)求,得到上傳文件的FileItem對(duì)象,得到的也就是所有的表單name --->比如:這里只有一個(gè)name="fileName" 拿到的就是這個(gè)集合
?? ??? ?List<FileItem> fileItems = null;
?? ??? ?try {
?? ??? ??? ?fileItems = fileUpload.parseRequest(request);
?? ??? ?} catch (FileUploadException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
//8、遍歷集合
for(FileItem fileItem:fileItems) { ? //文本域
//判斷是否為普通字段
?? ??? ??? ?if(fileItem.isFormField()) {
?? ??? ??? ??? ?//得到字段名、字段值
?? ??? ??? ??? ?String name = fileItem.getFieldName(); ? ? //
?? ??? ??? ?}
? ? //為文件域
?? ??? ??? ?else {
//9、得到所上傳的文件路徑名
String fileName = fileItem.getName();
?//10、截取文件名?
String fiString = fileName.substring(fileName.lastIndexOf("\\")+1);
//11、設(shè)置上傳的目標(biāo)文件夾路徑
File filedir = new File("C:\\NewFile");
? ? ? ? if(!filedir.exists()) {
?? ??? ??? ??? ??? ?filedir.mkdir();
?? ??? ??? ??? ?}
//? ? System.out.println(user.getUserName());
?? ??? ??? ??? ?File filepath = new File(filedir+"\\"+fiString);?
//? ? System.out.println(fiString);
?? ??? ??? ??? ?if(!filepath.exists()) {
?? ??? ??? ??? ??? ?filepath.createNewFile();
?? ??? ??? ??? ?}
?? ??? ??? ??? ?//獲得文件上傳流
?? ??? ??? ??? ?InputStream in = fileItem.getInputStream();
?? ??? ??? ??? ?//使用FileOutStream打開(kāi)服務(wù)器端的上傳文件
?? ??? ??? ??? ?FileOutputStream out = new FileOutputStream(filepath);
?? ??? ??? ??? ?//流的對(duì)拷
?? ??? ??? ??? ?byte[] bb = new byte[1024];
?? ??? ??? ??? ?int len ;?
?? ??? ??? ??? ?while((len= in.read(bb))>0) {
?? ??? ??? ??? ??? ?out.write(bb, 0, len);
//?? ??? ??? ??? ??? ?out.close();
//?? ??? ??? ??? ??? ?in.close();
?? ??? ??? ??? ??? ?fileItem.delete(); ? //刪除臨時(shí)文件
?? ??? ??? ??? ?}
?? ??? ??? ??? ?write.println("文件上傳成功<br/>");
?? ??? ??? ?}
?? ??? ?}
?? ?}

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

相關(guān)文章

  • Java字符串的壓縮與解壓縮的兩種方法

    Java字符串的壓縮與解壓縮的兩種方法

    這篇文章主要介紹了Java字符串的壓縮與解壓縮的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java實(shí)現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法

    Java實(shí)現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)等待所有子線程結(jié)束后再執(zhí)行一段代碼的方法,涉及java多線程的線程等待與執(zhí)行等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持

    SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持

    這篇文章主要介紹了SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)徹底理解關(guān)于KMP算法

    Java數(shù)據(jù)結(jié)構(gòu)徹底理解關(guān)于KMP算法

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)關(guān)于KMP算法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 一文帶你搞懂Java中方法重寫(xiě)與方法重載的區(qū)別

    一文帶你搞懂Java中方法重寫(xiě)與方法重載的區(qū)別

    這篇文章主要介紹了Java中方法重寫(xiě)與方法重載有哪些區(qū)別,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • 如何優(yōu)雅的進(jìn)行Spring整合MongoDB詳解

    如何優(yōu)雅的進(jìn)行Spring整合MongoDB詳解

    這篇文章主要給大家介紹了如何優(yōu)雅的進(jìn)行Spring整合MongoDB的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Java游戲服務(wù)器系列之Netty相關(guān)知識(shí)總結(jié)

    Java游戲服務(wù)器系列之Netty相關(guān)知識(shí)總結(jié)

    今天帶大家來(lái)學(xué)習(xí)Java游戲服務(wù)器的相關(guān)知識(shí),文中對(duì)Netty作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 基于logback 實(shí)現(xiàn)springboot超級(jí)詳細(xì)的日志配置

    基于logback 實(shí)現(xiàn)springboot超級(jí)詳細(xì)的日志配置

    java web 下有好幾種日志框架,比如:logback,log4j,log4j2(slj4f 并不是一種日志框架,它相當(dāng)于定義了規(guī)范,實(shí)現(xiàn)了這個(gè)規(guī)范的日志框架就能夠用 slj4f 調(diào)用)。這篇文章主要介紹了基于logback springboot超級(jí)詳細(xì)的日志配置,需要的朋友可以參考下
    2019-06-06
  • Java靜態(tài)和非靜態(tài)成員變量初始化過(guò)程解析

    Java靜態(tài)和非靜態(tài)成員變量初始化過(guò)程解析

    這篇文章主要介紹了Java靜態(tài)和非靜態(tài)成員變量初始化過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 詳解Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的介紹

    詳解Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的介紹

    棧是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則來(lái)存儲(chǔ)和訪問(wèn)數(shù)據(jù)。Stack是一個(gè)類(lèi),表示棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。本文就來(lái)和大家介紹一下Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的使用,需要的可以參考一下
    2023-04-04

最新評(píng)論