我想在用户购买图像后向他们提供下载网址,这是我的代码:
const get_file_url = (file: File) => {
return new Promise((acc, err) => {
const reader = new FileReader()
reader.onload = (event) => {
acc(event.target?.result)
}
reader.onerror = (error) => {
err(error)
}
reader.readAsDataURL(file)
})
}
你只需向它传递一个文件,它就会创建正确的 URL,不,URL 很大(mK4EFLV700MChmzwBsU+9yyY8n86Lu'... 36363 个字符)每个图像大约 35k 个字符,我不认为我应该将所有内容存储在一个数据库,我什至不认为我可以,如果我想要我该怎么办?
预期:网址更短
readAsDataURL 函数在其返回的 URL 中包含以 Base 64 编码的文件数据: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
正如您所注意到的,这可能不是您想要的。如何向用户提供文件的 URL 将取决于文件实际使用的存储机制:文件系统、数据库等。
get_file_url
的参数即 (file: File)
是否已可通过 URL 访问?或者它是否存储在非公开访问的位置?
无论是在文件系统上一个不起眼但公共的位置、非公共位置还是数据库中,您都可以在一个简短的参数化 URL 处编写受保护的服务器路由,将某些哈希 ID 映射到文件路径/数据库 BLOB 。然后,在通过哈希或查询授权和查找文件路径后,将该文件作为具有适当标头的 HTTP 响应提供。