dropzone上传单文件、多文件,springboot后台接收

引入相关的js和css

(一)单文件上传实例:

  • html代码:

<!--轮播图-->
<div class="form-group">
    <label class="col-sm-3 control-label ">轮播图:</label>
    <div class="col-sm-8">
        <input type="hidden" id="BannarImgId" name="BannarImgId">
        <div id="bannarzone" class="dropzone" style="min-height: 120px"></div>
    </div>
</div>
  • js代码:

// 缩略图片拖拽区域=============================================
    var myAvatarzone = new Dropzone("#avatarzone", {
        url: "/FileController/uploadAvatar",//文件提交地址
        method: "post",  //也可用put
        paramName: "avatar", //默认为file
        maxFiles: 1,//一次性上传的文件数量上限
        maxFilesize: 2, //文件大小,单位:MB
        acceptedFiles: ".jpg,.gif,.png,.jpeg", //上传的类型
        addRemoveLinks: true,
        parallelUploads: 1,//一次上传的文件数量
        //previewsContainer:"#preview",//上传图片的预览窗口
        dictDefaultMessage: '拖动文件至此或者点击上传',
        dictMaxFilesExceeded: "您最多只能上传1个文件!",
        dictResponseError: '文件上传失败!',
        dictInvalidFileType: "文件类型只能是*.jpg,*.gif,*.png,*.jpeg。",
        dictFallbackMessage: "浏览器不受支持",
        dictFileTooBig: "文件过大上传文件最大支持.",
        dictRemoveLinks: "删除",
        dictCancelUpload: "取消",
        init: function () {
            this.on("addedfile", function (file) {
                //上传文件时触发的事件

            });
            this.on("success", function (file, data) {
                //上传成功触发的事件
                if (data != null && data != "") {
                    $("#avatarImgId").val(data.data);
                }

            });
            this.on("error", function (file, data) {
                //上传失败触发的事件

            });
            this.on("removedfile", function (file) {//删除文件触发结果
                //console.log(file);
                $("#avatarImgId").val("");
            });
        }
    });
  • 后台接受:

    //自己的方法
    @PostMapping("/uploadAvatar")
        @ResponseBody
        public AjaxResult updateAvatar(@RequestParam("avatar") MultipartFile avatar) {
            try {
                if (!avatar.isEmpty()) {
                    //上传文件、将文件路径等信息存储到表
                    String id = phoneFileService.insertSelective(avatar);
                    if (id != null) {
                        return AjaxResult.successData(200, id);
                    }
                }
                return error();
            } catch (Exception e) {
                return error(e.getMessage());
            }
        }

    (二)多文件上传实例:

        注意事项:

        1. uploadMultiple:true,设置可以上传多个附件,请注意后台收到的参数; 

        2.后台接收的参数是数组类型@RequestParam("bannar[ ]") MultipartFile[ ] bannar 

  • html代码:

<!--轮播图-->
                            <div class="form-group">
                                <label class="col-sm-3 control-label ">轮播图:</label>
                                <div class="col-sm-8">
                                    <input type="hidden" id="BannarImgId" name="BannarImgId">
                                    <div id="bannarzone" class="dropzone" style="min-height: 120px"></div>
                                </div>
                            </div>
  • js代码:

// 轮播图片拖拽区域=============================================
    var myBannarzone = new Dropzone("#bannarzone", {
        url: "/FileController/uploadBannar",//文件提交地址
        method: "post",  //也可用put
        paramName: "bannar", //默认为file
        maxFiles: 8,//一次性上传的文件数量上限
        uploadMultiple:true,
        maxFilesize: 2, //文件大小,单位:MB
        acceptedFiles: ".jpg,.gif,.png,.jpeg", //上传的类型
        addRemoveLinks: true,
        parallelUploads: 8,//一次上传的文件数量
        //previewsContainer:"#preview",//上传图片的预览窗口
        dictDefaultMessage: '拖动文件至此或者点击上传',
        dictMaxFilesExceeded: "您最多只能上传8个文件!",
        dictResponseError: '文件上传失败!',
        dictInvalidFileType: "文件类型只能是*.jpg,*.gif,*.png,*.jpeg。",
        dictFallbackMessage: "浏览器不受支持",
        dictFileTooBig: "文件过大上传文件最大支持.",
        dictRemoveLinks: "删除",
        dictCancelUpload: "取消",
        init: function () {
            this.on("addedfile", function (file) {
                //上传文件时触发的事件

            });
            this.on("success", function (file, data) {
                //上传成功触发的事件
                if (data != null && data != "") {
                    $("#BannarImgId").val(data.data);
                }

            });
            this.on("error", function (file, data) {
                //上传失败触发的事件

            });
            this.on("removedfile", function (file) {//删除文件触发结果
                //console.log(file);
                $("#BannarImgId").val("");
            });
        }
    });
  • 后台接受:

@PostMapping("/uploadBannar")
    @ResponseBody
    public AjaxResult uploadBannar(@RequestParam("bannar[]") MultipartFile[] bannar) {
        System.out.print("获取到的bannar的数量是====="+bannar.length);
        try {
            if (bannar != null && bannar.length > 0) {
                String id = phoneFileService.insertBannar(bannar);
                if (id != null) {
                    return AjaxResult.successData(200, id);
                }
            }
            return error();
        } catch (Exception e) {
            return error(e.getMessage());
        }
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Dropzone.js 上传大文件后端接收方式与普通文件上传略有不同。由于 Dropzone.js 使用了分片上传,因此后端需要对上传的每个分片进行处理,并在所有分片上传完成后将它们合并成一个完整的文件。以下是一个 PHP 后端接收 Dropzone.js 大文件上传的示例代码: ```php <?php $targetDir = "uploads/"; // 上传文件保存目录 $targetFile = $targetDir . $_POST["dzuuid"] . "_" . $_POST["dzchunkindex"]; // 分片文件路径 $chunkSize = intval($_POST["dzchunksize"]); // 分片大小 $totalSize = intval($_POST["dztotalfilesize"]); // 文件总大小 $chunkIndex = intval($_POST["dzchunkindex"]); // 当前分片索引 // 创建上传目录 if (!file_exists($targetDir)) { mkdir($targetDir, 0777, true); } // 保存上传的分片文件 if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)) { // 检查所有分片是否已上传完成 $totalChunks = ceil($totalSize / $chunkSize); for ($i = 0; $i < $totalChunks; $i++) { $chunkFile = $targetDir . $_POST["dzuuid"] . "_" . $i; if (!file_exists($chunkFile)) { die("分片未上传完成"); } } // 将所有分片合并成一个完整的文件 $finalFile = $targetDir . $_POST["dzuuid"]; $fp = fopen($finalFile, "wb"); for ($i = 0; $i < $totalChunks; $i++) { $chunkFile = $targetDir . $_POST["dzuuid"] . "_" . $i; $fp2 = fopen($chunkFile, "rb"); stream_copy_to_stream($fp2, $fp); fclose($fp2); unlink($chunkFile); // 删除已合并的分片文件 } fclose($fp); // 返回上传结果 echo json_encode(array( "success" => true, "filename" => $_POST["dzuuid"] )); } else { echo json_encode(array( "success" => false, "message" => "上传失败" )); } ?> ``` 上述代码中,我们首先获取上传的分片文件信息,包括分片大小、文件总大小、当前分片索引等。接着,将上传的分片文件保存到指定目录,并检查所有分片是否已上传完成。如果所有分片都已上传完成,则将它们合并成一个完整的文件。最后,返回上传结果,包括上传是否成功和上传后的文件名。 需要注意的是,上述代码仅为示例,具体实现需要根据实际情况进行调整。例如,可以根据上传文件的类型、大小、格式等进行校验和过滤,避免恶意文件上传文件格式不兼容等问题。另外,需要注意文件上传过程中的并发数、上传速度等问题,以保证上传效率和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值