栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

10、JavaWeb-upload文件上传

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

10、JavaWeb-upload文件上传

参考链接: 

FileUpload – Home
Commons IO – Commons IO Overview

一、不推荐的上传文件的逻辑(代码繁琐逻辑简单)

index15_upload.jsp  

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


    upload


<%--
--%> <%----%>

可以提交文件、图片等文件

如果提交的txt文件后台直接读取txt文件中的字符串

 Servlet14_Upload.java

package com.test.app;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;


@WebServlet("/servlet14_Upload")
public class Servlet14_Upload extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String file=req.getParameter("file");
        // file==null 原因是以字符串形式去取取文本是取不到的,应该以流的形式去取

        //字节流
        InputStream inputStream = req.getInputStream();

        


        //InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        //Reader reader = new InputStreamReader(inputStream);//不加UTF-8乱码但是后续写入文件就不乱码了
        Reader reader = new InputStreamReader(inputStream,"UTF-8");
        BufferedReader bufferedReader = new BufferedReader(reader);
        //通过输出流将数据输出到本地硬盘存储起来
        //获取文件夹绝对路径--out的绝对路径相关
        //String path = req.getServletContext().getRealPath("/file/copy.jpg");
        String path = req.getServletContext().getRealPath("/file/copy.txt");
        OutputStream outputStream = new FileOutputStream(path);
        //WebDemooutartifactsServeletPractice_war_explodedfilecopy.txt (系统找不到指定的路径。)
        //需要提前创建好文件夹file

        Writer writer = new OutputStreamWriter(outputStream);
        BufferedWriter bufferedWriter = new BufferedWriter(writer);

        String str = "";
        while ((str = bufferedReader.readLine()) != null) {
            System.out.println(str);//打印
            bufferedWriter.write(str);//输出保存
        }
        
        bufferedWriter.close();
        writer.close();
        bufferedReader.close();
        reader.close();
        inputStream.close();
        //
        //
    }
}
二、推荐的upload file逻辑

下载commons-fileupload-1.4.jar和commons-io-2.11.0.jar引用到工程中

 

 

 

 

Servlet14_Upload.java
package com.test.app;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;


@WebServlet("/servlet14_Upload")
public class Servlet14_Upload extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);

            List fileItemList = servletFileUpload.parseRequest(req);
            System.out.println(fileItemList);

            for (FileItem fileItem : fileItemList) {
                System.out.println(fileItem.getName());
                System.out.println(fileItem.getFieldName());//获取表单提交时候的name属性值
                //如果fileItem.isFormField()==true表示它是一个文本,浏览器中可能体现为一个输入框
                if (fileItem.isFormField()) {
                    String name = fileItem.getFieldName();
                    String value = fileItem.getString("UTF-8");
                    System.out.println(name + "t" + value);
                    //如果fileItem.isFormField()==true表示它是一个文件
                } else {

                    //1、整行读取是读不出换行符号的
                    //2、按字节读取可以读出换行符
                    //3、按字符读取的时候如果遇到图片文件,由于不是按照字节读取,图片数据的内部结构被破坏。
                    String fileName = fileItem.getName();
                    long size = fileItem.getSize();
                    System.out.println(fileName + ":" + size + "Byte");
                    String path = req.getServletContext().getRealPath("file/" + fileName);
                    InputStream inputStream = fileItem.getInputStream();
                    OutputStream outputStream = new FileOutputStream(path);
                    int temp = 0;
                    while ((temp = inputStream.read()) != -1) {
                        outputStream.write(temp);
                    }
                    outputStream.close();
                    inputStream.close();
                    System.out.println("上传成功");


                    
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }


    }

    protected void doPost_not_recommened(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String file=req.getParameter("file");
        // file==null 原因是以字符串形式去取取文本是取不到的,应该以流的形式去取

        //字节流
        InputStream inputStream = req.getInputStream();

        


        //InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        //Reader reader = new InputStreamReader(inputStream);//不加UTF-8乱码但是后续写入文件就不乱码了
        Reader reader = new InputStreamReader(inputStream, "UTF-8");
        BufferedReader bufferedReader = new BufferedReader(reader);
        //通过输出流将数据输出到本地硬盘存储起来
        //获取文件夹绝对路径--out的绝对路径相关
        //String path = req.getServletContext().getRealPath("/file/copy.jpg");
        String path = req.getServletContext().getRealPath("/file/copy.txt");
        OutputStream outputStream = new FileOutputStream(path);
        //WebDemooutartifactsServeletPractice_war_explodedfilecopy.txt (系统找不到指定的路径。)
        //需要提前创建好文件夹file

        Writer writer = new OutputStreamWriter(outputStream);
        BufferedWriter bufferedWriter = new BufferedWriter(writer);

        String str = "";
        while ((str = bufferedReader.readLine()) != null) {
            System.out.println(str);
            bufferedWriter.write(str);
        }
        
        bufferedWriter.close();
        writer.close();
        bufferedReader.close();
        reader.close();
        inputStream.close();
        //
        //
    }
}
index15_upload.jsp
<%--
  Created by IntelliJ IDEA.
  User: Admin
  Date: 2022/1/18
  Time: 15:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    upload


<%--
--%> <%----%> 上传文件:
上传图片:
上传文本:
上传desc:

可以提交文件、图片等文件

如果提交的txt文件后台直接读取txt文件中的字符串

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号