Javascript 最佳实现:将图像文件上传到数据库中,并从数据库中读取图像
我正试图实现这一点: 1) 在JSP页面中有一个文件上传程序 2) 选择图像并按下“保存”按钮 3) 然后在servlet中将图像保存到数据库中 4) 所以当我需要从数据库中读取图像时 仅供参考,我正在使用spring和hibernate 我找到了一个工作代码。这是html代码:Javascript 最佳实现:将图像文件上传到数据库中,并从数据库中读取图像,javascript,image,hibernate,jsp,spring-mvc,Javascript,Image,Hibernate,Jsp,Spring Mvc,我正试图实现这一点: 1) 在JSP页面中有一个文件上传程序 2) 选择图像并按下“保存”按钮 3) 然后在servlet中将图像保存到数据库中 4) 所以当我需要从数据库中读取图像时 仅供参考,我正在使用spring和hibernate 我找到了一个工作代码。这是html代码: <form class="navbar-form" name="myform" id="myform" method="POST"> <input type="file" id="files
<form class="navbar-form" name="myform" id="myform" method="POST">
<input type="file" id="files" name="file" />
<input class="span2" type="hidden" name="image" id="image" value="-1">
<span class="readBytesButtons">
<button>Save</button>
</span>
</form>
现在图像保存在数据库中。现在,当我需要从数据库加载图像时,我只需这样做
@自动连线
@Autowired
ImagesBo imagesBo;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("show_image");
Map<String, Object> myModel = new HashMap<String, Object>();
Images img = imagesBo.getImage();
myModel.put("image", img.getStrImage());
return new ModelAndView("lista_libri_in_catalogo", "model", myModel);
}
@Autowired
ImagesBo ImagesBo;
@凌驾
受保护的模型和视图HandlerRequestInternal(HttpServletRequest,
HttpServletResponse)引发异常{
ModelAndView模型=新的ModelAndView(“显示图像”);
Map myModel=newhashmap();
Images img=imagesBo.getImage();
myModel.put(“image”,img.getStrImage());
返回新模型和视图(“目录中的列表”、“模型”、“myModel”);
}
其中getStrImage()是类Images中的一个函数
public String getStrImage() {
byte[] _bytes = this.image;
String file_string = "";
for (int i = 0; i < _bytes.length; i++) {
file_string += (char) _bytes[i];
}
return file_string;
}
公共字符串getStrImage(){
字节[]_字节=this.image;
字符串文件_String=“”;
对于(int i=0;i<_bytes.length;i++){
文件_字符串+=(字符)_字节[i];
}
返回文件字符串;
}
最后在show:image.jsp中,我使用了以下代码
<script>
function base64_encode (data) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
ac = 0,
enc = "",
tmp_arr = [];
if (!data) {
return data;
}
do { // pack three octets into four hexets
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1 << 16 | o2 << 8 | o3;
h1 = bits >> 18 & 0x3f;
h2 = bits >> 12 & 0x3f;
h3 = bits >> 6 & 0x3f;
h4 = bits & 0x3f;
// use hexets to index into b64, and append result to encoded string
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
} while (i < data.length);
enc = tmp_arr.join('');
var r = data.length % 3;
return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
}
function readBlob(opt_startByte, opt_stopByte) {
var files = document.getElementById('files').files;
if (!files.length) {
alert('Please select a file!');
return;
}
var file = files[0];
var start = parseInt(opt_startByte) || 0;
var stop = parseInt(opt_stopByte) || file.size - 1;
var reader = new FileReader();
// If we use onloadend, we need to check the readyState.
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
document.getElementById('myform').image.value= base64_encode(evt.target.result);
document.getElementById('myform').action = "saveImg.htm";
document.getElementById('myform').submit();
}
};
var blob = file.slice(start, stop + 1);
reader.readAsBinaryString(blob);
}
document
.querySelector('.readBytesButtons')
.addEventListener(
'click',
function(evt) {
if (evt.target.tagName.toLowerCase() == 'button') {
var startByte = evt.target
.getAttribute('data-startbyte');
var endByte = evt.target
.getAttribute('data-endbyte');
readBlob(startByte, endByte);
}
}, false);
</script>
<img src="data:img/jpeg;base64, ${model.strImage}" width="200px" height="200px"></div>
正如我所说,这是完美的,但我不确定最好的方法。有人有更好的密码吗?还是一些建议
谢谢。我不会将图像内容直接保存到数据库中。 我会将图像传输到一个文件夹,然后将路径与图像的位置一起保存在数据库中
我不确定这是否是最佳实践,但我看到它被用于分配,并且我还使用此实现在过去的项目中保存图像 嗯。。我可以试着这样做,看看有什么更好。谢谢你的回答如果这是你满意的答案,请将其标记为已回答。谢谢,不客气!
<img src="data:img/jpeg;base64, ${model.strImage}" width="200px" height="200px"></div>