js选择多张照片回显并上传

21 篇文章 1 订阅
6 篇文章 0 订阅

之前写过上传图片的相关需求,回显是图片上传到服务器后返回的路径,这回来个不一样的,选择图片之后直接用js的内置文件流回显出来再在form表单里同一提交数据,上传图片,接下来上代码

//样式就不写了,各位喜欢什么样式自己写,或者直接找个前端框架都有了
HTML:
<form id="myForm" method="post" enctype="multipart/form-data" >
    <p>选择图片</p>
    <!--
        accept:可接受文件类型,不写就是可以上传所有文件
        多选图片上传的话一定要带上multiple属性,或者multiple = "multiple"
      -->
    <input type="file" accept="image/jpeg,image/png" multiple name="file" onchange="previewFile()"/>
    <!--回显图片的地方-->
    <div id="imgDiv"></div>
    <button onClick="doSubmit();" type="button">确认</button>
</form>

JavaScript:
<script type="text/javascript">
    function previewFile() {
        //清空回显区域,否则每次都会向后拼接
        $("#imgDiv").html("");
        //获取文件对象
        var file = document.querySelector('input[type=file]').files;
        if (file) {
            //如果有对象,向下执行
            if (file.length == 1) {
                //如果只选择一张图片,直接通过js内置文件流回显出来
                var reader = new FileReader();
                reader.onloadend = function () {
                    var html = "<img src="+reader.result+" />";
		    $("#imgDiv").html(html);
                }
                reader.readAsDataURL(file[0]);
	    } else if (file.length > 1) {
                //多张图片,循环回显
                for (var i = 0; i < file.length; i++) {
                    read(file[i]);
		}
            }
        } else {
            //如果没有,为空
            preview.src = "";
        }
    }

    function read (file) {
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function () {
            var html = "<img src="+reader.result+" />";
            $("#imgDiv").append(html);
	}
    }

    //提交数据
    function doSubmit() {
        var formData = new FormData($("#myForm")[0]);
        $.ajax({
            type: 'POST',
            url: '/addData',
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            dataType: 'json',
            success: function(result){
                if (result.state == 200) {
                    alert('添加成功');
                } else {
                    alert(result.msg);
                }
                return false;
            }
        });
        return false;
    }
</script>
Java:
@RequestMapping(value = "/addData",produces= MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public BaseResult addData (HttpServletRequest request MultipartFile[] file) {
    //MultipartFile[] file获取多张图片;MultipartFile file获取一张图片
    //上传服务器路径
    String path = request.getSession().getServletContext().getRealPath("/haha");
    File filepath = null;
    for (int i = 0; i < file.length; i++) {
        if (!file[i].getOriginalFilename().isEmpty()) {
            filepath = new File(path, file[i].getOriginalFilename());
            try {
                file[i].transferTo(new File(path + file[i].getOriginalFilename()));
                //上传的时候发现了一个问题,如果把图片名称改成生成时间戳后重命名上传,可能会导致上传的文件相同,小编纠结了好久发现原来是我的服务器运行太快,下一个图片生成的图片名称和上一个一样,我也是很懵圈,时间戳都生成到毫秒了还能出这问题,于是机智的我想出了一个办法,每次上传一张照片后咱让程序睡一秒,就没有这个问题了
                //sleep(1000);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    if (filepath != null) {
        if(!filepath.getParentFile().exists()){
            filepath.getParentFile().mkdirs();
        }
    }
    //返回类型随便定义,不一定要抄我的。温馨提示:后端返回值和我不一样时,前端判断也要改一下
    return BaseResult.ok();
}

GAMEOVER~有不成功的可以给我留言,不对的地方请大佬们指正!!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
你可以使用JavaScript来实现在单元格中上图片并回显的功能。以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <title>上图片并回显</title> </head> <body> <input type="file" id="upload" accept="image/*"> <table> <tr> <td id="imageCell"></td> </tr> </table> <script> // 获取上文件的input元素 var uploadInput = document.getElementById('upload'); // 监听文件选择事件 uploadInput.addEventListener('change', function() { var file = this.files[0]; // 检查是否选择了文件 if (file) { // 创建一个FileReader对象 var reader = new FileReader(); // 监听读取完成事件 reader.onload = function(e) { // 创建一个img元素 var img = document.createElement('img'); // 设置img元素的src为读取的文件内容 img.src = e.target.result; // 将img元素添加到单元格中 var imageCell = document.getElementById('imageCell'); imageCell.innerHTML = ''; imageCell.appendChild(img); }; // 读取文件内容 reader.readAsDataURL(file); } }); </script> </body> </html> ``` 在以上代码中,我们创建了一个包含一个文件选择输入框和一个单元格的简单HTML页面。当用户选择了一个图片文件后,我们使用`FileReader`对象来读取文件内容,并将读取的内容设置为一个新创建的`img`元素的`src`属性。最后,将该`img`元素添加到单元格中,从而实现了在单元格中上图片并回显的功能。 请注意,由于安全限制,JavaScript无法直接操作本地文件系统。因此,我们使用`FileReader`对象来读取文件内容,并通过将读取的内容设置为`img`元素的`src`属性来显示图片。这样可以实现在浏览器中上和回显图片。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值