一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現文件上傳和下載

java實現文件上傳和下載

2022-02-23 13:08一只Java小白1111 Java教程

這篇文章主要為大家詳細介紹了java實現文件上傳和下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現文件上傳和下載的具體代碼,供大家參考,具體內容如下

文件的上傳

upload:文件上傳

客戶端通過表單的文件域file  把客戶端的文件 上傳保存到服務器的硬盤上

頁面

首先對上傳的表單有以下要求:

  • 必須有文件域:input type=file
  • 表單提交方式:method=post
  • 表單的 enctype=multipart/form-data
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form method="post" action="/user/regist" enctype="multipart/form-data">
        <table style="border: chartreuse;solid:2px">
            <tr>
                <th>用戶名</th>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <th>密碼</th>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <th>用戶頭像</th>
                <td><input type="file" name="photo"> </td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="提交"></td>
            </tr>
        </table>
</form>

Servlet

1)首先要導入以下兩個jar包,通過commons-fileupload實現文件上傳

java實現文件上傳和下載

2)創建一個工廠對象DiskFileItemFactory,在創建一個多部件表單解析器ServletFileUpload,構造方法傳入工廠對象

3)解析器解析請求對象,獲得一個list集合,其中list集合存儲的是一個一個的fileItem對象,一個fileItem對應一個組件,也就是一個<input>

4) 遍歷集合用isFormField()方法判斷是否為普通組件,然后著重處理文件域組件

5)獲取文件名,并用getRealPath方法獲取服務器上傳文件所在路徑,創建新文件夾

6)獲取輸入流和創建輸出流,進行文件的讀寫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@WebServlet(value = "/user/regist")
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //創建一個工廠對象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //創建一個多部件解析器對象
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        User user = new User();
        FileOutputStream out=null;
        try {
            //用解析器對象解析請求,返回一個FileItem類型的集合
            List<FileItem> list = fileUpload.parseRequest(req);
            for (FileItem fileItem : list) {
                /**
                 * fileItem.getFieldName());:::獲取組件的name值
                 * fileItem.getName());::::獲取文件域的文件名
                 * fileItem.getSize());::::獲取數據的字節個數
                 * fileItem.getString());::::獲取數據的字符串
                 * fileItem.isFormField());:::判斷是否為普通組件
                 */
                //判斷部件是否為普通組件
                if (fileItem.isFormField()) {//普通組件
                    //獲取組件名字也就是name的值
                    String fieldName = fileItem.getFieldName();
                    //獲取組件的值也就是value的值
                    String value = fileItem.getString("utf-8");
                    if ("username".equals(fieldName)) { //設置實體類的屬性
                        user.setUsername(value);
                    } else if ("password".equals(fieldName)) {
                        user.setPassword(value);
                    }
                } else {// 文件域
                    //獲取文件名
                    String fielName = fileItem.getName();
                    //輸入流來讀數據
                    InputStream in = fileItem.getInputStream();
                    //設置文件寫出的路徑,并用隨機碼來保證圖片可以重復
                    String path=req.getServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);
                    System.out.println("文件路徑為:"+path);
                    File file = new File(path);
                     out = new FileOutputStream(file);
                     //利用commons-io-1.4.jar的IOUtils的copy方法直接實現文件的復制
                    IOUtils.copy(in,out);
                    user.setPhoto(file.getName());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(out!=null){
                out.close();
            }
        }
        req.getSession().setAttribute("user",user);
        req.getRequestDispatcher("/sucess.jsp").forward(req,resp);
    }
 
}

文件的下載

頁面

只需一個超鏈接,傳需要下載的文件名,或者直接輸入路徑在瀏覽器

例: <a  href="<c:url value='/file/download?fileName=14.jpg'/>" >狗狗1</a><br/>

Servlet

1)接收參數,獲取文件名

2)獲取imgs的路徑,也就是存儲文件的文件夾的路徑,然后創建文件,傳入該路徑和文件名

3)創建輸入流讀取文件

4)設置響應頭,首先根據文件名字獲取文件的大類型,設置響應頭Content-Type指定響應的類型;設置響應頭Content-Disposition,指定文件以附件形式保存到本地磁盤

5)用響應獲取輸出流,讀出文件到客戶端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@WebServlet("/user/download")
public class DownloadServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //獲取要下載的文件名
        String fileName = request.getParameter("fileName");
        System.out.println(fileName);
        //獲取服務器中存儲圖片的文件夾的路徑
        String path1 = request.getServletContext().getRealPath("/imgs");
        String path=path1+"/"+fileName;
        File file = new File(path);
        //創建輸入流讀文件
        FileInputStream in = new FileInputStream(file);
        //通過文件名字獲取文件的大類型
        String type = request.getServletContext().getMimeType(fileName);
        //設置響應頭ContentType指定響應內容的類型
        response.setHeader("Content-type",type);
        //設置響應頭Content-Disposition 指定以附件形式保存響應的信息
        response.setHeader("Content-Disposition","attachment;filename="+(URLEncoder.encode(fileName, "utf-8")));
        ServletOutputStream out = response.getOutputStream();
        //實現文件的讀寫
        IOUtils.copy(in,out);
        if(in!=null){
        in.close();
        }
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixin_45943192/article/details/120834578

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 视频国产精品 | 亚洲欧美国产精品完整版 | 久久草福利自拍视频在线观看 | 私人黄色 | 欧美成人免费一区在线播放 | 精品久久久久久久久久久久久久久 | sp啪啪调教打屁股网站 | 高h辣文小说网 烧书阁 | 日本三级在线观看免费 | 特级老女人淫片高清视频 | 55夜色66夜亚州精品站 | 亚洲品质水蜜桃 | 国产一级一级一级成人毛片 | 激情小视频网站 | 天天欲色成人综合网站 | 国产精品久久久 | 国产欧美日韩不卡一区二区三区 | 91午夜视频 | 国产一区二区三区在线看 | 国产在视频线精品视频 | 成人免费公开视频 | 欧美人shou交在线播放 | 美女gif跪趴式抽搐动态图 | 亚洲国产区男人本色在线观看欧美 | 饭冈加奈子乳喷cead144 | a黄毛片 | 青青热久久综合网伊人 | 18欧美同性videos可播放 | www.片| 99久久精品免费看国产 | 桥本有菜ssni-677在线观看 | 免费岛国 | 放荡警察巨r麻麻出轨小说 范冰冰特黄xx大片 饭冈加奈子在线播放观看 法国老妇性xx在线播放 | 俄罗斯大白屁股 | 国产a一级 | 国产做a爰片久久毛片 | 艾秋麻豆果冻剧传媒在线播放 | 亚洲黄色色图 | 激情六月丁香婷婷四房播 | 国产欧美国产精品第一区 | 无遮挡h肉动漫高清在线 |