如何实现上传图片并保存到数据库及遇到的问题

如何实现上传图片并保存到数据库及遇到的问题

现在由于人们的生活质量的提高及网络的发达,所以在各大软件中上传个人的头像及其他图片已成为普遍的事情,差不多所有的软件都实现了这个功能,那么他们究竟是怎么做到的呢?
其实并不难,现在我就以一个完整的例子来讲解一下。
先来看一下效果图及结构,再来看一下实现的功能的写法。
效果图:
在这里插入图片描述
Html:
在这里插入图片描述
问题1:如何实现上传图片的功能并把图片显示出来?
步骤:1、先打开file文件表单选择图片;2、创建FileReader对象 ,用正则表达式过滤图片文 件;3、利用改变事件将图片显示出来;4、读取文件,将url绑定到img标签的src属性上。
详细: 1、chooseImageFile方法:

 function chooseImageFile(inputFileID) {
      $("#" + inputFileID).click();
 }

2、创建 FileReader 对象,用正则表达式过滤图片:

var imgReader = new FileReader();
//正则表达式 过滤图片文件
regexImageFile=/^(?:image\/jpg|image\/jpeg|image\/png)$/i; 

FileReader 对象允许 Web 应用程序来异步读取存储在用户计算机上的文件里面的内容,使 用 File 或者 Blob 对象指定要读取的文件或数据,其中结合 input:file 可以很方便的读取本地文件里面的内容。
3、利用改变事件将图片显示出来:

function showImgToView(inputFileId) {
    //选择图片文件
    var imgFile = $("#" + inputFileId).get(0).files[0];
    //判断上传文件是否为图片格式
    if (!regexImageFilter.test(imgFile.type)) {
          layer.msg("请选择有效的图片文件", { icon: 0, title: "提示",skin:"layui-layer-molv" });
    }
    else {
           //将文件读取为DataURL 
           imgReader.readAsDataURL(imgFile);
    }
 }

readAsDataURL()方法是 FileReader 对象里面的方法,其作用为可以获取 API 异步读取的文件 数据,将图片另存为数据 Url,还可以实现图片上传预览的效果,让用户确认是否就是上传这张 图片,提升用户体验。
4、读取文件

imgReader.onload = function (evt) {
    //将该URL绑定到img标签的src属性上,就可以实现图片的上传预览效果了。
    $("#ImgCommodityPicture").attr("src", evt.target.result);
};

问题2: 如何进行提交表单数据?
给保存按钮一个点击事件,进行提交数据,再给form标签一个action行为进行提交表单数据。

//保存新增
function InsertPicture() {
    $("#formCommodity").ajaxSubmit(function (returnJson) {
        //保存成功
        if (returnJson.State) {
            //提示信息
             layer.alert(returnJson.Text, { icon: 1, title: "提示" });
}
else {
             layer.alert(returnJson.Text, { icon: 0, title: "提示" });
}
     });
}

问题3: 如何清空图片?

  //清空图片
    function ClearPicture() {
        $("#ImgCommodityPicture").attr("src", "");
    }

问题4: 如何把图片保存到数据库?
在这里插入图片描述
注:在保存数据到数据库的时候我遇到了一个问题,就是虽然图片上传到了显示出来了,但是就是不可以保存到数据库,主要是fileCommodityPicture传过来的值为Null,除了单词写错之外,其实有三种可能会导致传到控制器中没有值,第一种是传到控制器的名字不能与数据库中存放图片的字段对应;第二种是传到控制器的值要与input中的name属性中的名字一致;第三种就是在form标签里面写明是用post请求(method=“post”),否则fileCommodityPicture的值无法传到控制器。
虽然看似简单,但是还是要注意细节问题。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值