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

JavaWeb中的文件的上傳和下載

 更新時間:2023年10月18日 09:01:23   作者:Neo丶  
JavaWeb 文件的上傳和下載是指在Web應(yīng)用中實現(xiàn)用戶上傳文件到服務(wù)器和從服務(wù)器下載文件的功能,通過JavaWeb技術(shù),可以方便地實現(xiàn)文件的上傳和下載操作,提供更好的用戶體驗和數(shù)據(jù)交互,需要的朋友可以參考下

文件上傳

1.要有一個form標(biāo)簽,method=post請求

2.form標(biāo)簽的encType屬性的值必須為multipart/form-data值

3.在from標(biāo)簽中使用input type=file添加上傳的文件

4.編寫服務(wù)器代碼接收上傳的數(shù)據(jù)

Content-Type:表示提交的數(shù)據(jù)類型

enctype="multipart/form-data":表示提交的數(shù)據(jù),以多段(每一個表單一個數(shù)據(jù)段)的形式進(jìn)行拼接,然后以二進(jìn)制流的形式發(fā)送給服務(wù)器

boundary:表示每段數(shù)據(jù)的分隔符

----WebKitFormBoundaryOZ1BoZwqflbGWUBH是由瀏覽器每次都隨機生成,他就是每段數(shù)據(jù)的分界符

package com.pero.file.file_upload;
 
import jakarta.servlet.*;
import jakarta.servlet.http.*;
 
import java.io.IOException;
 
public class UploadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("文件上傳");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.pero.file.file_upload.UploadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/uploadServlet</url-pattern>
    </servlet-mapping>
</web-app>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2023/3/15
  Time: 23:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/file_Upload/uploadServlet" method="post" enctype="multipart/form-data">
    用戶名:<input type="text" name="username"/>

    頭像:<input type="file" name="photo"/>

    <input type="submit" value="上傳">
</form>
</body>
</html>

常用API

導(dǎo)入commons-fileupload-1.3.3.jar和commons-io-2.6.jar包到項目lib目錄下

常用類:

  • ServletFileUpload類:用于解析上傳的數(shù)據(jù)
  • FileItem類:表示每一個表單項
  • boolean ServletFileUpload.isMultipartContent(HttpServletRequest request):判斷當(dāng)前上傳的數(shù)據(jù)格式是否為多段的格式
  • public List<FileItem> parseRequest(HttpServletRequest request):解析上傳數(shù)據(jù)
  • boolean isFormField():判斷當(dāng)前表單項是普通表單項還是上傳的文件類型,true表示表單項,false表示上傳的文件類型
  • String getFieldName():獲取表單項的name屬性值
  • String getString():獲取當(dāng)前表單項的值
  • String getName():獲取上傳的文件名
  • void write(File var1) throws Exception:將上傳的文件寫到參數(shù)file所指向的硬盤位置

文件上傳測試

package com.pero.servlet;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
 
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        //先判斷上傳數(shù)據(jù)是否為多段數(shù)據(jù)(只有多段數(shù)據(jù)才是文件上傳的)
        if (ServletFileUpload.isMultipartContent(req)) {
            //創(chuàng)建FileItemFactory工廠實現(xiàn)類
            FileItemFactory fileItemFactory = new DiskFileItemFactory();
            //創(chuàng)建用于解析上傳數(shù)據(jù)的工具類
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            //解析上傳的數(shù)據(jù)得到每一個表單項Item
            try {
                List<FileItem> list = servletFileUpload.parseRequest(req);
                //循環(huán)判斷每一個表單項是普通類型還是上傳文件
                for (FileItem fileItem : list) {
                    if (fileItem.isFormField()) {
                        //普通表單項
                        System.out.println("表單項的name屬性值:" + fileItem.getFieldName());
                        //參數(shù)UTF-8解決中文亂碼
                        System.out.println("表單項的value值:" + fileItem.getString("UTF-8"));
                    } else {
                        //上傳文件
                        System.out.println("表單項的name屬性值:" + fileItem.getFieldName());
                        System.out.println("上傳文件名:" + fileItem.getName());
                        fileItem.write(new File("G:\\test" + fileItem.getName()));
                    }
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">
    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.pero.servlet.UploadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/uploadServlet</url-pattern>
    </servlet-mapping>
</web-app>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2023/3/15
  Time: 23:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="http://192.168.42.31:8080/Upload_Web/uploadServlet" method="post" enctype="multipart/form-data">
    用戶名:<input type="text" name="username"/><br>
    頭像:<input type="file" name="photo"/><br>
    <input type="submit" value="上傳">
</form>
</body>
</html>

文件的下載

客戶端發(fā)送請求告訴服務(wù)器需要下載什么文件,服務(wù)器過去要下載的文件名,讀取要下載的文件內(nèi)容,把下載的文件內(nèi)容回傳給客戶端,再回傳前,通過響應(yīng)頭告訴客戶端返回的數(shù)據(jù)類型,還要通過響應(yīng)頭告訴客戶端收到的數(shù)據(jù)是用于下載使用

常用API說明:

  • response.getOutputStream():獲取響應(yīng)輸出流
  • servletContext.getResourceAsStream():用于讀取要下載的內(nèi)容(返回對象為輸入流)
  • servletCOntext.getMimeType():獲取要下載的文件類型
  • response.setContentType():在回傳之前通過響應(yīng)頭告訴客戶端返回的數(shù)據(jù)類型

response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("你好.png","UTF-8"));該響應(yīng)頭是告訴瀏覽器,這個文件是要下載的文件。attachment表示附件,也就是下載的文件,fileName=后面的表示下載的文件名

package com.pero.servlet.download_web;
 
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import org.apache.commons.io.IOUtils;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
 
public class Download extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.獲取要下載的文件名
        String downloadFileName = "1.png";
        //2.讀取要下載的文件內(nèi)容(通過ServletContext對象讀取)
        ServletContext servletContext = getServletContext();
        //獲取要下載的文件類型
        String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
        System.out.println("下載的文件類型:" + mimeType);
        //再回傳之前通過響應(yīng)頭告訴客戶端返回的數(shù)據(jù)類型
        response.setContentType(mimeType);
        //還要告訴客戶端收到的數(shù)據(jù)是用于下載使用(還是使用響應(yīng)頭)
        //Content-Disposition響應(yīng)頭表示收到的數(shù)據(jù)怎么處理
        //attachment表示指定下載的文件名
        //url編碼是把漢字轉(zhuǎn)換成%xx%xx的格式
        response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("你好.png","UTF-8"));
        InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName);
        //獲取響應(yīng)輸出流
        OutputStream outputStream = response.getOutputStream();
        //把要下載的文件內(nèi)容回傳給客戶端
        //讀取輸入流中全部的數(shù)據(jù)賦值給輸出流,輸出給客戶端
        IOUtils.copy(resourceAsStream, outputStream);
    }
 
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>Download</servlet-name>
        <servlet-class>com.pero.servlet.download_web.Download</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Download</servlet-name>
        <url-pattern>/download</url-pattern>
    </servlet-mapping>
</web-app>

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

相關(guān)文章

最新評論