照片视频文件上传到oracle数据库

本文介绍了如何处理客户端文件上传到服务器,并讨论了三种不同的文件存储策略:直接存入数据库、保存到Web服务器硬盘及使用文件服务器。重点讲述了文件上传的实现过程,包括前端表单设置、后台处理以及使用ServletFileUpload解析请求。同时,针对图片保存在Tomcat之外的目录,解释了如何通过配置Tomcat的虚拟路径实现访问。
摘要由CSDN通过智能技术生成

文件上传:

客户端把文件上传到服务器,
服务器保存客户上传的文件:
1)把文件保存到数据库中(表对应文件的字段的数据类型: blob), 很少使用,
文件保存到数据库麻烦(通过编写存储过程), 从数据库取文件也麻烦
2)把文件保存到web服务器的硬盘, 数据库中存放的文件的路径 学习
Web服务器的压力大, 用户操作文件(大量的IO操作), 需要访问web服务器,
3)再搭建一个文件服务器,专门用于存放上传的文件, 数据库中存放的文件的url(网络路径), 模式与2一样, 把文件与web服务器分离, 减轻web服务器的压力
Linux操作系统

文件上传的环境:
1)前端页面的设置:
A)使用 文件域标签
B)对form表单的标签的method=”post”请求
C)对form表单的标签的enctype的属性设置:
enctype的默认值: application/x-www-form-urlencoded 对内容进行url编码, 而文件本身就是二进制, 不能进行编码,一旦编码, 变成文本, 不再是文件.
enctype的值设置为: multipart/form-data 对内容不进行编码
2)后台的设置:
A)导入用于文件上传的第三方jar:

B)一旦前端表单设置enctype为”multipart/form-data”
request.getParamter()这一类获取请求参数的方法失效

文件上传的编码实现:
1)创建工厂类DiskFileItemFactory对象
2)创建一个文件上传的解析器对象 ServletFileUpload ,用于解析request请求
3)使用解析器对象解析request, (把request中包含的请求参数获取到)
调用解析器对象的List parseRequest(request)
4)遍历List集合获取到每一个FileItem(对应的就是表单中每一项:input)
5)判断FileItem是否是文件域还是普通表单元素,如果是普通表单项. 获取这个表单项的value值, 如果是文件域, 把文件保存到指定的硬盘位置

//设置请求体编码
request.setCharacterEncoding("UTF-8");
//1 ,先判断上传的数据是否多段数据(只有是多段的数据,才是文件上传的)
if (ServletFileUpload.isMultipartContent(request)) {
   
    // 2 ,创建 FileItemFactory 工厂实现类
    FileItemFactory fileItemFactory = new DiskFileItemFactory();
    // 3,创建用于解析上传数据的工具类 ServletFileUpload 类
    ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
    //4,设置上传文件大小  默认单位字节
    servletFileUpload.setFileSizeMax(3000*1024);
    Student student = new Student(); //创建对象来接收数据
    try {
   // 5,解析上传的数据,得到含有每一个表单项 FileItem 的list集合
        List<FileItem> list = servletFileUpload.parseRequest(request);
        // 6,循环判断,每一个表单项,是普通类型,还是上传的文件
        for (FileItem fileItem : list) {
   
            if (fileItem.isFormField()) {
   
                //6.1 普通表单项
                String name = fileItem.getFieldName();
                if(name.equals("name")){
   
                    student.setName(fileItem.getString("UTf-8"));
                }else if(name.equals("password")){
   
                 String  password = fileItem.getString("UTf-8");<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值