【问题标题】:How to upload a file in SQL Server DB using Java and Spring MVC如何使用 Java 和 Spring MVC 在 SQL Server DB 中上传文件
【发布时间】:2015-08-26 09:06:45
【问题描述】:

我在表单标签中有带有method="post" enctype="multipart/form-data"> 的jsp,带有@RequestParam CommonsMultipartFile otherDocs, 的Spring MVC 控制器和下面的代码用于将文件插入数据库

        PreparedStatement pstmt = null;

        try {
            String fileName = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\")+1, fileItem.getName().length());

            File file = new File(fileItem.getName());
            FileInputStream fis = new FileInputStream(file);

            String sql = "INSERT INTO MyTable(formId, fileType, fileName, updateTime, updateUser, content) VALUES(?, ?, ?, getDate(), ?, ?)";

            pstmt = connection.prepareStatement(sql);          

            pstmt.setInt(1, id);
            int len = (int)file.length();

            if(fileItem.getContentType().endsWith(".document")){
                pstmt.setString(2, "Document");
            }else{
                pstmt.setString(2, "else");             
            }
            pstmt.setString(3, fileName);
            pstmt.setString(4, userLoggedIn);

            //pstmt.setBytes(5, bs);<------noted
            pstmt.setBinaryStream(5, fis, len);

            int count = pstmt.executeUpdate();
        } catch (Exception e) {             
            e.printStackTrace();            
        }finally{
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

仅在设置了第 5 个参数时,在触发 executeUpdate() 后,我得到“字符串或二进制数据将被截断。”。我尝试在没有运行良好的第 5 个参数的情况下运行查询。

我也尝试使用带注释的“注释”行,得到相同的数据截断错误。

谢谢

【问题讨论】:

  • 您需要使用 blob 或 clob 将其保存在 DB 中,或者如果您想要一些简单的东西,则使用字节数组。我对 SQL 服务器一无所知,但我建议使用随机创建的标识符将文件保存在磁盘上,然后将标识符和路径保存在数据库中。如果您喜欢这种方法,我可以为您提供解决方案。
  • 我无法使用您建议的方法。我正在使用带有“内容”的 SQL Server 作为 varbinary 数据类型。感谢您的评论。
  • 好的。享受。让我知道是否有问题。
  • 我试图获取我的表的定义,因为它显示“CHARACTER_MAXIMUM_LENGTH”为1。我认为它应该是-1。有什么猜测吗?
  • 对 SQL 服务器一无所知。

标签: java sql-server spring spring-mvc file-upload


【解决方案1】:

如果您将文件 extern 保存在具有哈希值或类似名称的目录中,这将是一个更好的解决方案,在数据库中您应该只在之后保存它的名称。

【讨论】:

  • 感谢您的建议,将采用这种方式。但我没有因此而面临任何问题。请告诉我该怎么办,我现在面临什么?
【解决方案2】:

需要将数据库表的列从 varbinary 更改为 varbianry(max)。这项更改使我的代码可以工作:)

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 2017-01-17
    • 2013-01-09
    • 1970-01-01
    • 2015-03-29
    • 2019-04-15
    • 2015-11-09
    • 1970-01-01
    相关资源
    最近更新 更多