文件上传(FileUpload)

摘要:
文件上传目录文件上传Jsp:Servlet:Jsp:1.input的type属性设置为file2.form表单的method设置为post。下面是文件上传代码:packagecom.wildfire.servlet.upload;importcom.wildfire.servlet.HttpServlet;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.*;@WebServletpublicclassuploadextendsHttpServlet{@OverrideprotectedvoiddoPostthrowsServletException,IOException{//通过输入流获取从客户端传来的数据。虽然能完成文件上传,但是效果并不是很好,所以我们大多采用以下方法:使用FileUpload组件。第一步:导入jar包:commons-fileupload-1.4.jar、commons-io-2.8.0.jar。
文件上传
目录

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

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

免责声明:文章转载自《文件上传(FileUpload)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇后缀自动机构建图解kettle 连接Hadoop 遇错下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ext.js弹窗上传文件

1.构建上传组件 var fileUpload = new Ext.FormPanel({ id:'fileUpload', frame:true, fileUpload:true, items:[{ xtype: 'filefield',...

struts2 s:file标签使用及文件上传例子

  <s:form action="uploadaction" method="post" enctype="multipart/form-data" >    <s:file label="上传" theme="simple" name="upload"/>    <s:submit value="上传"/> <...

Web开发、原生开发、混合开发的区别优势:

  一、Web 应用 Web应用本质上是为移动浏览器设计的基于Web的应用,它们是用普通Web开发语言开发的,可以在各种智能手机浏览器上运行。 优点: 支持设备广泛; 较低的开发成本; 可即时上线; 无内容限制; 用户可以直接使用最新版本(自动更新,不需用户手动更新)。 缺点: 表现略差(对联网的要求比较大); 用户体验没那么炫; 图片和动画支持性不...

多屏适应响应式布局方案,响应式、自适应布局区别 完整的思维导图

多屏适应响应式布局方案,响应式、自适应布局区别 响应式布局 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,一个网站能够兼容多个终端,而不是为每个终端做一个特定的版本,不需要分配子域名。可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着目前大屏幕移动设备的普及,用大势所趋来形容也不为过。 响应式布局能够兼容不同屏幕...

ASP.NET 2.0站点登录、导航与权限管理 转

ASP.NET 2.0站点登录、导航与权限管理(一)登录 asp.net 2.0中,新增了许多新的功能和控件。其中,新增的登陆控件可谓使得WEB应用的设计更加得心应手。什么是登陆控件呢?就是我们平常在WEB应用中经常要用到的用户注册,登陆,忘记密码,登陆后根据权限的不同而显示不同的页面等功能,现在在asp.net 2.0中都已经可以由提供的控件来实现...

Python Web 开发的十个框架【转载】

Python 是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还自带服务器。 其它方面,Python拥有足够多的免费数据函数库、免费的Web网页模板系统、还有与Web服务 器进行交互的库、这些都可以设计到你的Web应用程序...