后端存储为base64的还是存什么比较近合适
时间: 2024-04-03 07:33:55 浏览: 14
将图片存储为 Base64 编码的字符串,可以方便地将图片数据以文本的形式存储在数据库或者 JSON 数据中,但是也有一些缺点:
1. 占用存储空间:Base64 编码会使图片变大,通常会增加 33%。也就是说,如果原始图片大小为 1MB,编码后的字符串大小将为 1.33MB,这会占用更多的存储空间。
2. 加载速度慢:Base64 编码后的字符串需要先解码,才能显示图片,这会增加加载时间,尤其是对于大型图片来说,影响更加明显。
3. 不利于缓存:Base64 编码后的图片不能被浏览器缓存,每次访问时都需要重新加载。
相比之下,将图片存储在服务器上,然后在前端通过 URL 加载图片,更加适合实际应用中的需求。这样做的好处包括:
1. 占用存储空间更少:存储原始图片比存储 Base64 编码后的字符串要占用更少的存储空间。
2. 加载速度更快:加载图片的速度更快,因为不需要先解码。
3. 利于缓存:可以被浏览器缓存,再次访问时可以直接从缓存中读取,提高加载速度。
因此,通常情况下,建议将图片存储在服务器上,并通过 URL 加载图片。当然,对于一些小图标或者简单的图形,可以考虑使用 Base64 编码存储。
相关问题
uniapp将后端返回的base64下载为word文件
在 Uniapp 中,可以使用以下代码将后端返回的 base64 字符串下载为 Word 文件:
```javascript
// 将 base64 字符串转换为 ArrayBuffer
const base64ToArrayBuffer = (base64) => {
const binary = atob(base64)
const length = binary.length
const buffer = new ArrayBuffer(length)
const view = new Uint8Array(buffer)
for (let i = 0; i < length; i++) {
view[i] = binary.charCodeAt(i)
}
return buffer
}
// 将 ArrayBuffer 转换为文件并保存到本地
const saveBase64AsFile = (base64, filename) => {
const arrayBuffer = base64ToArrayBuffer(base64)
const blob = new Blob([arrayBuffer], { type: 'application/octet-stream' })
const url = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = filename
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
URL.revokeObjectURL(url)
}
// 下载 Word 文件
const downloadWordFile = () => {
uni.request({
url: 'your api url',
method: 'GET',
responseType: 'arraybuffer', // 指定响应类型为 ArrayBuffer
success: (res) => {
const base64Str = btoa(new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')) // 将 ArrayBuffer 转换为 base64 字符串
const filename = 'your filename.docx'
saveBase64AsFile(base64Str, filename)
},
fail: (err) => {
console.log(err)
}
})
}
// 调用示例
downloadWordFile()
```
其中,`downloadWordFile` 函数使用 `uni.request` 发送 GET 请求获取后端返回的 Word 文件的二进制数据,指定响应类型为 ArrayBuffer,然后将 ArrayBuffer 转换为 base64 字符串,并调用 `saveBase64AsFile` 函数将其下载为 Word 文件。在调用 `btoa` 函数将 ArrayBuffer 转换为 base64 字符串时,需要先将 ArrayBuffer 转换为 Uint8Array 类型,再使用 `reduce` 方法将其转换为字符串。
java后端 blob转base64
可以使用Java的Base64类将Blob转换为Base64编码的字符串,例如:
```java
Blob blob = resultSet.getBlob("blob_column");
byte[] bytes = blob.getBytes(1, (int) blob.length());
String base64String = Base64.getEncoder().encodeToString(bytes);
```
注意要导入java.util.Base64类。