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

一、数据库应该放些什么

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

二、如何上传文件

首先,要在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标签库都有了更加深刻的理解,明白了如何携带信息跳转页面,获取登录信息,也懂得了该如何将他们运用到实战中去,希望在接下来的学习中能做的更好,加油!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: multipartfile上传文件null可能是因为上传的文件为空或者上传的文件名为空。建议检查一下上传的文件是否存在,文件名是否正确。如果问题仍然存在,可以尝试重新上传文件或者联系相关技术人员进行处理。 ### 回答2: 在Java中,使用MultipartFile接口来处理文件上传是很常见的方法。然而,在上传文件遇到MultipartFile为null的情况,可能有以下几个原因。 第一种可能性是在前端页面中未正确设置文件上传表单。在前端页面的form表单中要添加enctype="multipart/form-data"属性,否则后端无法正确解析文件数据。 第二种可能性是由于网络传输的问题文件未正确传递到后端。可以检查网络连接是否正常并确保文件传递过程没有中断或丢失。 第三种可能性是后端代码中未正确处理文件上传。在Spring框架中,使用@RequestParam注解获取MultipartFile时,需要确保参数名称与前端的文件上传字段名称一致,并且类型为MultipartFile。 另外,还可以检查文件上传的大小限制是否合理,避免上传过大的文件导致出现null的情况。可以通过设置Spring的配置文件(如application.properties或application.yml)中的相关属性来限制文件大小。 最后,还可以考虑通过使用其他方式来上传文件,例如使用Apache Commons FileUpload或Servlet的Part接口等。 总之,当出现MultipartFile为null的情况时,需要仔细检查前端页面、网络传输、后端代码以及文件大小限制等方面的问题,以确保文件成功上传并能够正确处理。 ### 回答3: multipartfile上传文件为null可能有以下几种情况: 1. 前端未选择文件进行上传:在实际操作时,如果用户没有选择任何文件进行上传,那么后台接收到的multipartfile参数就会是null。因此,我们需要在前端确保用户已经选择文件后再进行上传操作。 2. 文件大小超过限制:在文件上传的过程中,有可能会设置文件的大小限制。如果上传的文件大小超过了设定的限制,那么后台接收到的multipartfile参数也会是null。我们需要检查文件大小限制设置是否正确,并对超过限制的文件进行相应提示。 3. 请求数据丢失:在数据传输过程中,有可能会因为网络等原因导致数据丢失。如果后台接收到的请求数据中文件部分的内容丢失了,那么multipartfile参数也会是null。我们需要确保数据传输的可靠性,避免数据丢失的情况发生。 4. 服务器配置问题:有时候multipartfile上传文件为null可能是由于服务器的配置问题导致的。例如,可能是服务器未正确配置multipartfile的解析器等。我们可以检查服务器的配置是否正确,并进行相应的调整。 综上所述,multipartfile上传文件为null可能是由于前端选择文件问题文件大小超限、请求数据丢失、服务器配置等多种原因导致的。我们需要针对具体情况进行排查和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值