图片上传,文件流经过base64转码,最后转成字符串上传到服务器,通过HttpServletRequest的getParameter

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片上传,文件流经过base64转码,最后转成字符串上传到服务器,通过HttpServletRequest的getParameter相关的知识,希望对你有一定的参考价值。

如果图片比较小,可以获取到,比较大的就获取不到,为null,请问下是什么问题?

上传的文件太大,getParameter中获取不到,存放在getInputStream中,要在getInputStream中获取,然后再转成字符串就可以了。 参考技术A tomcat对POST请求有长度限制
在tomcat server.xml 加上这句话
maxPostSize="-1"
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" maxPostSize="-1"/>

将input type="file" 类型的图片文件转成base64

带有图片的form表单上传数据是很麻烦的,因为图片通常都是和文字分开上传,这是很麻烦的,所有吧图片转成base64就可以和当成文字上传了。话不多少,看代码:

首先定义一个类型为file的input标签还要定义一个onchange事件,并传入一个event参数。

 

<div>
    <input type="file" id="imgTest" type="file" onchange="imgChange(event)" accept=".gif,.jpg,.jpeg,.png">
</div>
<img src="" id="showImage" alt="">

 

 

在这个onchange事件方法中会接收一个event参数,我们可以在这个参数中拿到这个input的标签对象还可以拿到这个文件。

 

function imgChange(e) {
    console.info(e.target.files[0]);//图片文件
    var dom =$("input[id^=‘imgTest‘]")[0];
    console.info(dom.value);//这个是文件的路径 C:\fakepath\icon (5).png
    console.log(e.target.value);//这个也是文件的路径和上面的dom.value是一样的
    var reader = new FileReader();
    reader.onload = (function (file) {
        return function (e) {
           console.info(this.result); //这个就是base64的数据了
            var sss=$("#showImage");
            $("#showImage")[0].src=this.result;
        };
    })(e.target.files[0]);
    reader.readAsDataURL(e.target.files[0]);

}

 

 

拓展 : 把页面中的图片变成base64的数据

 

 

<!--这里先搞上一张图片-->
<img id="img" src="/img/my.jpg" alt="" style="width: 150px;height: 150px">

<input type="button" onclick="imgChaneBase64()" value="img标签绘制到canvas" /><br />
<!--引入html2canvas-->
<script type="text/javascript" src="/lib/html2canvas/html2canvas.js"></script>
<script type="text/javascript">
    function imgChaneBase64() {
        //将要变成base64的图片的html标签当参数传进来,这里如果将document传进来,就会将整个页面变成图片,在then中会返回一个canvas
        html2canvas(document.getElementById("img")).then(function(canvas) {
            console.info(canvas);
            var imgData = canvas.toDataURL("image/png"); //这里会将canvas转化为base64的数据
            document.body.appendChild(canvas); //页面鼠标右击这个标签时会提示保存图片,保存之后会以png格式保存

        });
    }
</script>

这里要注意的是这种方法其实利用的是截屏的原理,将html内容变成base64的,所有其实不是真的将这个图片变成base64。

 

 

以上是关于图片上传,文件流经过base64转码,最后转成字符串上传到服务器,通过HttpServletRequest的getParameter的主要内容,如果未能解决你的问题,请参考以下文章

php 图片用base64转码完的文本比以前还大 是为啥?

将图片转成base64写进hml,无需依赖本地文件

java base64位图片转码上传服务器,后台解码,后台保存文件路径不知道怎么写 求教(不是安卓)

博客园markdown编辑器下上传图片

使用Base64格式的图片制作ICON

uni-app上传头像base64转码