91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Servlet中實現上傳文件

發布時間:2022-03-01 09:55:42 來源:億速云 閱讀:153 作者:iii 欄目:開發技術

這篇文章主要講解了“怎么在Servlet中實現上傳文件”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么在Servlet中實現上傳文件”吧!

首先對Servlet上傳文件的簡單理解

此前,Servlet本身沒有對文件上傳提供直接的支持,一般需要使用第三方框架來實現,這樣就比較麻煩
不過,Servlet3.0之后提供了這個功能,而且使用非常簡單,,為此,HTTPServletRequest提供了兩個方法用于從請求中解析出上傳的文件:

Part getPart(String name)  //獲取請求中給定 name 的文件
Collection<Part> getParts() //獲取所有的文件

其中每一個文件用一個javax.servlet.http.Part對象來表示,該接口提供了處理文件的簡易方法,如write(),delete(),那么,結合 HttpServletRequest 和 Part 來保存上傳的文件變得非常簡單

Part img = request.getPart("img");
img.write("根路徑+\img.jpg")

注意:可以配合 @MultipartConfig 注解來對上傳操作進行一些自定義的配置,比如限制上傳文件的大小,以及保存文件的路徑等,但是,如果請求的 MIME 類型不是 multipart/form-data,則不能使用上面的兩個方法,否則將拋異常。

首先我們掌握開發Servlet的步驟:

前端:如果有前端內容的話,需要再寫一個html文件
后端

  • 首先編寫后臺的Servlet代碼(也即重寫doGet和doPost方法)

  • 配置項目文件,web.xml里面的映射文件

1.首先寫一個頁面(前端) html 文件

<!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="img"><p>
    <input type="submit" value=" 提 交 ">
</form>
</body>
</html>

2.寫Servlet后端類代碼

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
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.io.PrintWriter;

//首先必須聲明這個類是用來處理(文件)流的【不可獲取】
@MultipartConfig
public class FileServlet extends HttpServlet {
    @Override
    //因為提交表單只需要post,那么這里就不需要get方法了
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //首先拿到流信息,他返回的是一個part對象
        Part part = req.getPart("img");
        //手下聲明一個保存路徑,這里保存在D盤的File文件下
        String filePath = "D:\File\";
        //保存文件的名稱這里就和原文件的名稱一樣,通過part里面的方法得到原文件名稱
        String fileName = part.getSubmittedFileName();
        //通過write方法,可以將這個png文件保存在任意路徑下,write里面的參數,就是要保存的路徑
        part.write(filePath+fileName);

        //然后給前端返回響應的結果
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<h2>上傳成功</h2>");
    }}

3.配置web.xml映射

<servlet>
    <servlet-name>fileServlet</servlet-name>
    <servlet-class>FileServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>fileServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>

存在問題

那么哪里存在問題呢?

//首先拿到流信息,他返回的是一個part對象
        Part part = req.getPart("img");
        //手下聲明一個保存路徑,這里保存在D盤的File文件下
        String filePath = "D:\File\";
        //保存文件的名稱這里就和原文件的名稱一樣,通過part里面的方法得到原文件名稱
        String fileName = part.getSubmittedFileName();
        //通過write方法,可以將這個png文件保存在任意路徑下,write里面的參數,就是要保存的路徑
        part.write(filePath+fileName);

注意:其實這里是存在一點問題的

那么如何進行改進呢?

方法:使用UUID作為文件名

代碼改進:也就是把代碼中的fileName改成如下

//首先需要一個文件名,改進文件名的名稱(防止重復名稱覆蓋之前的文件)
        String fileName = UUID.randomUUID().toString()+
                part.getSubmittedFileName().substring(part.getSubmittedFileName().indexOf("."));

感謝各位的閱讀,以上就是“怎么在Servlet中實現上傳文件”的內容了,經過本文的學習后,相信大家對怎么在Servlet中實現上傳文件這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 福建省| 扬中市| 唐海县| 尖扎县| 美姑县| 石河子市| 板桥市| 阆中市| 安远县| 克拉玛依市| 井冈山市| 淮南市| 双柏县| 白城市| 桦甸市| 濮阳县| 永福县| 无极县| 奉贤区| 常熟市| 黑山县| 吉水县| 东乡县| 江阴市| 西青区| 城口县| 郸城县| 宜春市| 渭源县| 雷波县| 乌鲁木齐市| 大理市| 杭锦后旗| 泽州县| 镇康县| 丹东市| 凌云县| 温泉县| 钟祥市| 稻城县|