jsp+servlet實現文件上傳下載

来源:https://www.cnblogs.com/yewen1234/archive/2019/07/16/11111666.html
-Advertisement-
Play Games

相關素材下載 01.jsp 文件上傳UploadServlet.java 文件下載DownloadServlet.java web.xml ...


相關素材下載

01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Jsp+Servlet實現文件上傳下載</title>
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/common.css" />
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.11.1.js"></script>
<script type="text/javascript">
  $(function(){
      $(".thumbs a").click(function(){
          var largePath = $(this).attr("href");
          var largeAlt = $(this).attr("title");
          $("#largeImg").attr({
              src:largePath,
              alt:largeAlt
          });
          return false;
      });
      /* $("#myfile").change(function(){
          $("#previewImg").attr("src", "file:///D:/images/" + $("#myfile").val());
      }); */
      
      var la = $("large");
      la.hide();
      $("#previewImg").mousemove(function(e) {
          alert('<img src="' + this.src + '"/>');
          la.css({
              top:e.pageY,
              left:e.pageX
          }).html('<img src="' + this.src + '"/>').show();
      }).mouseout(function() {
          la.hide();
      });
  });
  /*js實現*/
  /*function showPreview(obj) {
      var str = obj.value;
      var a = document.getElementById("myfile").value;
      alert(a);
      console.log(str);
      var divImg = document.getElementById("previewImg");
      divImg.innerHTML = "<img src='" + str + "'/>";
  }*/
  function showPreview(obj) {
      var pic = document.getElementById("previewImg");
      var file = obj;
      if (window.FileReader) {
          oFReader = new FileReader();
          oFReader.readAsDataURL(file.files[0]);
          oFReader.onload = function (oFREvent) {pic.src = oFREvent.target.result;};    
      }
  }
</script>
</head>
<body>
<!-- 
    <form action="">
           請選擇文件:<input type="file" id="myfile" name="myfile" onchange="showPreview(this)"/>
        <div id="previewImg">
        </div>
    </form>
     -->
     <img id="previewImg" alt="" src="<%=request.getContextPath() %>/images/preview.jpg" width="80" height="80"/>
     <form action="<%=request.getContextPath() %>/uploadServlet" method="post" enctype="multipart/form-data">
           請選擇文件:<input type="file" id="myfile" name="myfile" accept="image/*" onchange="showPreview(this)" />
      <input type="submit" value="提交" />${result}
    </form>
    <a href="<%=request.getContextPath() %>/downloadServlet?filename=1.txt">1.txt</a>&nbsp;&nbsp;${errorResult}
     <div id="large"></div>
    <hr>
    <h2>圖片預覽</h2>
    <p>
        <img id="largeImg" alt="Large Image" src="<%=request.getContextPath() %>/images/img1-lg.jpg" />
    </p>
    <p class="thumbs">
        <a href="<%=request.getContextPath() %>/images/img2-thumb.jpg" title="Image2"><img src="<%=request.getContextPath() %>/images/img2-thumb.jpg" /></a>
        <a href="<%=request.getContextPath() %>/images/img3-thumb.jpg" title="Image3"><img src="<%=request.getContextPath() %>/images/img3-thumb.jpg" /></a>
        <a href="<%=request.getContextPath() %>/images/img4-thumb.jpg" title="Image4"><img src="<%=request.getContextPath() %>/images/img4-thumb.jpg" /></a>
        <a href="<%=request.getContextPath() %>/images/img5-thumb.jpg" title="Image5"><img src="<%=request.getContextPath() %>/images/img5-thumb.jpg" /></a>
        <a href="<%=request.getContextPath() %>/images/img6-thumb.jpg" title="Image6"><img src="<%=request.getContextPath() %>/images/img6-thumb.jpg" /></a>
    </p>
    
</body>
</html>

文件上傳UploadServlet.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        InputStream fileSource = req.getInputStream();
        File tempFile = new File("D:/tempFile");
        FileOutputStream outputStream = new FileOutputStream(tempFile);
        byte[] b = new byte[1024];
        int n;
        while ((n = fileSource.read(b)) != -1) {
            outputStream.write(b, 0, n);
        }
        outputStream.close();
        fileSource.close();

        // 獲取上傳文件名稱
        RandomAccessFile randomFile = new RandomAccessFile(tempFile, "r");
        randomFile.readLine();
        String str = randomFile.readLine();
        int beginIndex = str.lastIndexOf("=") + 2;
        int endIndex = str.lastIndexOf("\"");
        String fileName = str.substring(beginIndex, endIndex);
        System.out.println(fileName);

        // 重新定位文件指針到文件頭
        randomFile.seek(0);
        long startPosition = 0;
        int i = 1;
        // 獲取文件內容
        while ((n = randomFile.readByte()) != -1 && i <= 4) {
            if (n == '\n') {
                startPosition = randomFile.getFilePointer();
                i++;
            }
        }
        startPosition = startPosition - 1;
        // 獲取文件內容結束位置
        randomFile.seek(randomFile.length());
        long endPosition = randomFile.getFilePointer();
        int j = 1;
        while (endPosition >= 0 && j <= 2) {
            endPosition--;
            randomFile.seek(endPosition);
            if (randomFile.readByte() == '\n') {
                j++;
            }
        }
//        endPosition = endPosition - 1;

        // 設置保存上傳文件的路徑
        String realPath = getServletContext().getRealPath("/") + "images";
        File fileupload = new File(realPath);
        if (!fileupload.exists()) {
            fileupload.mkdir();
        }
        File saveFile = new File(realPath, fileName);
        RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile, "rw");
        // 從臨時文件當中讀取文件內容(根據起止位置獲取)
        randomFile.seek(startPosition);
        randomFile.readLine();
        while(startPosition < endPosition) {
            randomAccessFile.write(randomFile.readByte());
            startPosition = randomFile.getFilePointer();
        }
        // 關閉輸入輸出流,刪除臨時文件
        randomAccessFile.close();
        randomFile.close();
        tempFile.delete();
        
        req.setAttribute("result", "上傳成功!");
        RequestDispatcher dispatcher = req.getRequestDispatcher("jsp/01.jsp");
        dispatcher.forward(req, resp);
        
    }

}

文件下載DownloadServlet.java

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet extends HttpServlet{
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 獲取文件下載路徑
        String path = getServletContext().getRealPath("/") + "images/";
        String fileName = req.getParameter("filename");
        File file = new File(path + fileName);
        if (file.exists()) {
            // 設置相應類型 application/octet-stream
            resp.setContentType("application/x-msdownload");
            // 設置頭信息
            resp.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
            InputStream inputStream = new FileInputStream(file);
            ServletOutputStream outputStream = resp.getOutputStream();
            byte[] b = new byte[1024];
            int n;
            while((n = inputStream.read(b)) != -1) {
                outputStream.write(b, 0, n);
            }
            // 關閉流,釋放資源
            outputStream.close();
            inputStream.close();
        } else {
            req.setAttribute("errorResult", "文件不存在下載失敗");
            RequestDispatcher dispatcher = req.getRequestDispatcher("jsp/01.jsp");
            dispatcher.forward(req, resp);
        }
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doGet(req, resp);
    }
    
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>scxz</display-name>

    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.lijy.servlet.UploadServlet</servlet-class>
    </servlet>
    
    <servlet>
        <servlet-name>DowloadServlet</servlet-name>
        <servlet-class>com.lijy.servlet.DownloadServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/uploadServlet</url-pattern>
    </servlet-mapping>
    
    <servlet-mapping>
        <servlet-name>DowloadServlet</servlet-name>
        <url-pattern>/downloadServlet</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 二維數組遍歷: 外迴圈控制的是二維數組的長度,其實就是一維數組的個數。 內迴圈控制的是一維數組的長度。 外迴圈控制的是二維數組的長度,其實就是一維數組的個數。 內迴圈控制的是一維數組的長度。 結果: ...
  • ![](http://ww4.sinaimg.cn/large/006tNc79ly1g4ztauvhzej30p00dw45p.jpg) ## 前言 當應用開發中,我們要為一個對象在原有功能上進行擴展增強時,往往採用繼承的方式,而繼承過多時就會使得功能類更加複雜,不利於維護,而設計模式中裝飾者模式 ...
  • ...
  • mybatis中多對多的步驟 示例:用戶和角色,一個用戶可以有多個角色,一個角色可以賦予多個用戶 步驟: 1. 建立兩張表:用戶表,角色表,讓用戶表和角色表具有多對多的關係,需要使用中間表,中間表中包含兩張表的主鍵,在中間表中是外鍵 2. 建立兩個實體類:用戶實體類和角色實體類,讓用戶和角色的實體類 ...
  • eclipse 配置JDK_經驗 eclipse-->windows --> preformce-->java installed jre 然後要:--> change 再 rebuild 工程。 ...
  • 可以先想下這兩個問題: 1、怎樣使用滑動視窗? 2、如何快速的解決字元查重問題? 滑動視窗 可以想象一下有兩個指針,一個叫begin,一個叫now 這兩個指針就指定了當前正在比較無重覆的字元串,當再往後讀取一個字元的時候,就需要比較該字元在begin到now之間是否有重覆,如果有重覆的話,則記錄當前 ...
  • 溫故而知新 子曰:“溫故而知新,可以為師矣”。的確是這樣,對於技術知識的學習,我深有感悟。每一本書,每一個知識點,不去認真的讀上個2~3遍,根本無法理解其中的道理。藉著最近在學習SSH框架的機會,也抽時間把Java基礎知識好好再總結一遍,再系統的通過博文的形式將相關的知識樹,知識模塊總結出來。一來做 ...
  • 1. 函數的好處: 減少代碼重覆性(冗餘) 代碼可讀性高 將功能進行封裝(早工具) 2. 函數定義 3. 提示作用,沒有約束作用 4. 調用函數 函數名+() 多次調用就是執行多次 可以迴圈調用 5. 返回值 6. 參數 形參 函數定義的時候叫做形參 實參 傳參:將實參傳遞給形參的過程叫傳參 位置傳 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...