zoukankan      html  css  js  c++  java
  • 文件上传(FileUpload)

    文件上传

    Jsp:

    1.input的type属性设置为file(在layui、bootstrap等地方也可以找到更好看的控件)

    2.form表单的method设置为post。(get请求会将文件名传给服务器,而不是文件本身,也就是传过去一个字符串)

    3.form表单的enctype属性设置为 multipart/form-data(这种情况下将以二进制的形式传输数据)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>upload</title>
    </head>
    <body>
        <form method="post" enctype="multipart/form-data">
            <input type="file" name="file">
            <input type="submit" name="提交">
        </form>
    </body>
    </html>
    

    Servlet:

    测试文本:

    Java Web,是用Java技术来解决相关web互联网领域的技术栈。
    web包括:web服务端和web客户端两部分。
    Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。
    Java技术对Web领域的发展注入了强大的动力。

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
    Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

    image-20201115205556436

    下面是文件上传代码:

    package com.wildfire.servlet.upload;
    
    import com.wildfire.servlet.HttpServlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    
    @WebServlet("/upload")
    public class upload extends HttpServlet {
    
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //通过输入流获取从客户端传来的数据。
    
            //使读取速度加快
            //字节流
            InputStream inputStream=req.getInputStream();
            //字符流
            Reader reader=new InputStreamReader(inputStream);
            //缓冲流
            BufferedReader bufferedReader=new BufferedReader(reader);
    
            //通过输出流将数据输出到本地应用
            //获取文件夹的绝对路径,file是文件夹的名称,ceshifuben.txt要输出到的txt文件
            //要注意这里的file的创建位置,不能直接在IDEA里面创建,需要找到自己的工程目录,在其中的out文件夹下找到artifacts再在相应项目下创建file
            String path=req.getServletContext().getRealPath("/file/ceshifuben.txt");
    
            //输出流
            OutputStream outputStream=new FileOutputStream(path);
            //输出字节流
            Writer writer=new OutputStreamWriter(outputStream);
            //输出缓冲流
            BufferedWriter bufferedWriter=new BufferedWriter(writer);
    
            //写入
            String str="";
            //注意这里是两个括号
            while((str=bufferedReader.readLine())!=null){
                bufferedWriter.write(str);
            }
    
            //关闭输入输出流
            bufferedReader.close();
            bufferedWriter.close();
            writer.close();
            reader.close();
            inputStream.close();
            outputStream.close();
    
    
    
        }
    }
    

    要注意这里的file的创建位置,不能直接在IDEA里面创建,需要找到自己的工程目录,在其中的out文件夹下找到artifacts再在相应项目下创建file

    例如我的创建位置:D:WorkPlaceIntellijIDEAWorkPlaceIntellijIDEAJavaWebWorkPlacejavaweb学习1outartifactsjavaweb1_war_exploded2file

    得到的文本如下:

    -----------------------------39165874219639205374108370503Content-Disposition: form-data; name="file"; filename="ceshi.txt"Content-Type: text/plainJava Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。Java技术对Web领域的发展注入了强大的动力。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。-----------------------------39165874219639205374108370503--

    image-20201115205939637

    没有完成段落的划分,而且前后各多了一串字符,这是浏览器的附加信息。虽然能完成文件上传,但是效果并不是很好,所以我们大多采用以下方法:

    使用FileUpload组件。

    第一步:导入jar包:commons-fileupload-1.4.jar、commons-io-2.8.0.jar(使用IDEA时要注意这两个包需要同时导入)。

    第二步:使用fileupload

    fileupload组件可以将所有请求信息都解析成一个fileupload对象,我们可以通过对fileupload对象的操作完成上传,体现了面向对象的思想。

    虽然使用字节流缓冲流读取输出速度更快,但是如果输出的文字需要换行或者是图片,就必须使用字节流,字节流能读取换行符,而且可以传输图片。

    代码如下:

    package com.wildfire.servlet.upload;
    
    import com.wildfire.servlet.HttpServlet;
    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.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.List;
    
    @WebServlet("/upload")
    public class upload extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            try {
                DiskFileItemFactory fileItemFactory=new DiskFileItemFactory();
                ServletFileUpload servletFileUpload=new ServletFileUpload(fileItemFactory);
                List<FileItem> list=servletFileUpload.parseRequest(req);
                for(FileItem fileItem:list){
                    //判断是否是文件
                    if(fileItem.isFormField()){
                        //不是文件,是文本框等其他控件
                        String name=fileItem.getName();
                        //设置字符集为UTF-8
                        String value=fileItem.getString("UTF-8");
                        //在控制台输出文本框的name和value值
                        System.out.println(name+":"+value);
                    }else{
                        //是文件
                        String filename=fileItem.getName();
                        long size=fileItem.getSize();
                        System.out.print(filename+":"+size+":"+"Byte");
                        //读入
                        InputStream inputStream=fileItem.getInputStream();
                        /*Reader reader=new InputStreamReader(inputStream);
                        BufferedReader bufferedReader=new BufferedReader(reader);*/
                        //寻找路径,创建文件
                        String path=req.getServletContext().getRealPath("file/"+filename);
                        OutputStream outputStream=new FileOutputStream(path);
                        /*Writer writer=new OutputStreamWriter(outputStream);
                        BufferedWriter bufferedWriter=new BufferedWriter(writer);*/
                        int temp=0;
                        while((temp=inputStream.read())!=-1){
                            outputStream.write(temp);
                        }
                        /*bufferedReader.close();
                        writer.close();*/
                        outputStream.close();
                       /* bufferedWriter.close();
                        reader.close();*/
                        inputStream.close();
                        System.out.println("上传成功!");
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
        }
    
    
    }
    

    这是使用fileupload之后得到的文件:

    Java Web,是用Java技术来解决相关web互联网领域的技术栈。
    web包括:web服务端和web客户端两部分。
    Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。
    Java技术对Web领域的发展注入了强大的动力。

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
    Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

    image-20201116104512893

    可以很明显的看出和源文件一致。

  • 相关阅读:
    asp.net点击按钮下载图片而不是打开图片
    在事务中调用WebService一定程度上实现数据同步
    C#自定义Attribute的定义和获取简例
    开发ASP.NET下的MP3小偷程序
    Ajax 中XmlHttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)
    MasterPage 类
    怎样成为优秀的软件测试员
    标准日本语动词大全
    什么是WSDL?
    ASP.NET程序中常用的三十三种代码
  • 原文地址:https://www.cnblogs.com/wind-and-sky/p/13984034.html
Copyright © 2011-2022 走看看