使用 noSQL 和 MongoDB 在数据库中存储任何类型的文件的最佳方法是什么

What is the best way to store any kind of file in a database using noSQL and MongoDB

所以我正在创建一个票证系统,我想做的是将任何类型的文件添加到我的票证并将它们存储在我的数据库中。 所以我正在考虑只为“文件部分”使用 noSQL 数据库。 但是设置数据库的最佳方式是什么? 例如,如果我必须做一个数据库模式,数据库中必须有哪些字段,才能存储我想要的所有文件(PDF、JPG、JPEG.....)

您可以在 mongoDB 中的 json 文档中嵌入文件,已知限制为 16MB。 对于超过 16MB 的文件,您可以使用 gridFS 规范。 但一般来说,最佳实践方法是将引用存储在 mongoDB JSON 文档中,并将文件存储在外部专用文件对象存储中,如 S3 ...

如果您想上传超过 16MB 的文件,您可以使用 gridFs

方法一

除此之外,如果您想存储 PDF 或图像等文件,您可以使用 base64 字符串。然后您可以将文件作为 string 存储在数据库中。

请在下面找到我的代码并在此处尝试。您可以了解如何生成 base64 字符串以及我们如何在浏览器中查看它。(如果此代码无法在此处工作(PDF 部分),请将代码和 运行 复制到您的本地计算机上)

<!DOCTYPE html>
<html>

<head>
    <title>Convert to Base64</title>
    <script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
</head>

<body>
    <H1>Select file to upload and convert into base64 string</H1>
    <hr>
    <br>
    <label for="fileUpload">Choose file:</label>
    <input type="file" id="fileUpload" name="fileUpload" />
    <br><br>
    <button id="jsonConvert">Convert into Base64</button>
    <img style='display:block; width:100px;height:100px;' id='base64image' src='' />
    <iframe id='base64pdf' width='100%' height='100%' src=''>

    </iframe>
</body>

</html>
<script type="text/javascript">
    const toBase64 = file => new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => resolve(reader.result);
        reader.onerror = error => reject(error);
    });

    $('#jsonConvert').click(function () {
        const uploadedFile = document.querySelector('#fileUpload').files[0];
        toBase64(uploadedFile)
            .then(res => {
                const filetype = res.split("/")[0];
                if (filetype == "data:application") {
                    document.getElementById('base64pdf').src = res;
                } else if (filetype == "data:image") {
                    document.getElementById('base64image').src = res;
                }

                console.log(res);
            })
            .catch(err => {
                console.log(err);
            })
    });
</script>

方法 2

您可以将文件上传到像 S3 存储桶这样的存储桶,并获取它的 link 并将该 link 存储在您的数据库中。使用那个 link 你可以查看它。

希望您能通过以上方法找到解决方案。