解析上传文件所遇到的问题

一、数据库应该放些什么

数据库中不应该存放音频、图片、视频等大型文件,而是应该储存他们的存放地址,存放这些的东西的时候,应该把他们的地址放到数据库中,再从数据库服务器中得到他们存放的地址(路径),然后返回给浏览器,浏览器再利用此地址访问该视频。
在这里插入图片描述

二、如何上传文件

首先,要在web工程下建一个与WEB-INF同级的文件夹,用来储存资源文件,接下来就要交给代码啦。
1)jsp页面
填写表单信息,提交给服务器

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2022/2/22
  Time: 20:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>上传歌曲</title>
</head>
<body>
<center>
    <h1>File Upload to Database Demo</h1>
    <form method="post" action="uploadServlet" enctype="multipart/form-data">
        <table border="0">
            <tr>
                <td>主题:</td>
                <td><input type="text" name="title" size="50"/></td>
            </tr>
            <tr>
                <td>歌手:</td>
                <td><input type="text" name="singer" size="50"/></td>
            </tr>
            <tr>
                <td>歌名:</td>
                <td><input type="text" name="song" size="50"/></td>
            </tr>
            <tr>
                <td>类型:</td>
                <td><input type="text" name="type"/></td>
            </tr>
            <tr>
                <td>歌曲:</td>
                <td><input type="file" name="music" size="50"/></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="Save">
                </td>
            </tr>
        </table>
    </form>
</center>
</body>
</html>

2)servlet进行处理(数据库储存相对路径)


@WebServlet("/uploadServlet")
//配置上传文件的大小
@MultipartConfig(maxFileSize = 16177215 * 100)

public class FileUploadDBServlet extends HttpServlet {

    protected void doPost(HttpServletRequest req,
                          HttpServletResponse resp) throws ServletException, IOException {
		//设置字符集
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //获取表单信息
        String title = req.getParameter("title");
        String singer = req.getParameter("singer");
        String song = req.getParameter("song");
        String type = req.getParameter("type");
        String url = null;


        Connection conn = null;
        String message = null;
        User user = new User();
        PreparedStatement pst = null;

        final String PATH = "static";
        try {
            //利用集合储存文件
            List<String> list = new ArrayList<>();
            //获取上传文件进行储存
            Collection<Part> parts = req.getParts();
            for (Part p : parts) {
                //获取文件名
                String fileName = p.getSubmittedFileName();
                //判断是否为空,去除空异常
                if (fileName != null && fileName.length() > 0) {
                    list.add(fileName);
                    //将文件以相同文件名写到规定的路径
                    p.write(PATH + fileName);
                }
                url = PATH + "/" + fileName;
                System.out.println(url);
            }

            //连接数据库
            conn = JdbcUtils.getConnect();

            String sql = "INSERT INTO music (title,singer,music,song,type) values (?,?,?,?,?)";
            pst = conn.prepareStatement(sql);
            pst.setString(1, title);
            pst.setString(2, singer);
            pst.setString(3, url);
            pst.setString(4, song);
            pst.setString(5, type);
            //查看数据是否更新
            int row = pst.executeUpdate();
            if (row > 0) {
                message = "成功插入";
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            JdbcUtils.close(null, pst, conn);
            req.setAttribute("Message", message);
			//将req中储存的信息传递到下一个页面
            req.getRequestDispatcher("/Message.jsp").forward(req, resp);
        }
    }
}

/*
*executeQuery执行 SELECT 语句
*executeUpdate执行 INSERT、UPDATE 或 DELETE 语句,
*execute,两者都可,而且能返回多个ResultSet对象
*
*/

三、总结

经过这一段时间的学习与实战,我对于servlet、jsp、jstl标签库都有了更加深刻的理解,明白了如何携带信息跳转页面,获取登录信息,也懂得了该如何将他们运用到实战中去,希望在接下来的学习中能做的更好,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值