Java实现文件上传功能

最近做一个项目,需要用到上传功能。在这里就简单实现一个上传的功能。

1. 上传页面的代码

  1. 一开始是这样写的,form表单后面没有enctype参数。

在这里插入图片描述这里查看浏览器的请求参数,发现上传的图片只是图片的名字,根本不是图片的内容。
在这里插入图片描述

  1. 后面查看资料,发现在传输文件的时候,需要设值enctype属性

在这里插入图片描述

  1. 后面添了enctype属性后,查看浏览器中的请求参数

在这里插入图片描述可以看出,后面的一堆乱码文件应该就是要传输文件的二进制的内容。

2.处理请求servlet的代码

  1. 先输出了下request中携带的数据信息
    在这里插入图片描述发现输出为空,这里是因为我们上传选择的是文件类型,这是因为request.getParameter()获取到的只能是键值对的形式,而通过我们设置enctype的属性,发现传递的参数已经不是键值对的形式,因此,获取不到。
  2. 此时我们因该采用输入流的方式将request中的参数获取出来
    在这里插入图片描述可以发现,打印的内容和浏览器中参数携带的内容基本一样了。

3.上传思路

接下来讲解一下上传的思路,首先我们的输入流中包含普通项和上传项,普通项就是我们的姓名和密码,上传项就是我们的图片。中间通过分割线隔开。我们通过判断可以知道哪些是上传项、哪些是普通项。当为上传项时,先在服务器上新建一个和上传文件名一样的文件,然后利用IO流,将这些二进制文件写入服务器上的这个文件中,就完成了文件的上传。

上面讲的是实现原理,为了上传方便,我们引入commons-fileupload.jar和commons-io.jar。这个jar专门用于文件的上传。

  1. 上传前的了解fileupload
    通过FileItem可以判断是普通项还是上传项,其中
    getFieldName() 是用来获取form表单中的name属性

    getString()方法使用来获取form表单中的输入内容、或者上传项的二进制内容
    getName()方法用来获取上传文件中的上传的文件名
    在这里插入图片描述
  2. 上传代码
    这里注意,我们的运行代码和编写的代码并不一致,运行的代码在tomcat中,通过getServletContext().getRealPath("/img")可以得到绝对路径。
    在这里插入图片描述
  3. 已经完成了上传功能
    注意观察路径,是在tomcat的中。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Time__Lc/article/details/88805750