springboot 前端传blob后端接收转图片保存在磁盘前端使用cropper插件

本文介绍如何在SpringBoot应用中处理前端上传的Blob对象,将其转换为图片并保存到磁盘。前端使用了cropper插件进行图片处理,后端通过 ImgPath 类来管理和区分不同的文件路径,FileUploadUtil 类则负责文件的上传操作。

1.前端代码

canvas.toBlob(function (e) {
    console.log(e);  //e->生成的Blob
    var fd = new FormData();
    fd.append("file", e);
    $.ajax({
        url:url,
        dataType:'json',
        type:"POST",
        data: fd,
        processData: false,//必须加
        contentType: false,//必须加
        success:function(data,textStatus) {
            if (!isKickOut(data)) {
                if (data.resultCode == 100) {
                    $("#up-modal-frame").modal("hide");
                } else if (data.resultCode == 101) {
                    showJqueryConfirmWindow("#icon-shangxin1", "上传照片异常!");
                } else {
                    showJqueryConfirmWindow("#icon-tishi1", data.msg);
                }
            }
        },
        error:function(){
            showJqueryConfirmWindow("#icon-tishi1","失败");
        }});
},'image/jpeg');

2.后端代码

@PostMapping(value = "/uploadBlobImg")
@ResponseBody
public Result uploadFileImg(@RequestParam("file")MultipartFile blobFile) {
    Result result = new Result();
    try {
        if(IsEmptyUtils.isEmpty(blobFile)){
            result.setSuccess(false);
            result.setResultCode(IStatusMessage.SystemStatus.PARAMETERS_LOSE.getCode());
            result.setMsg(IStatusMessage.SystemStatus.PARAMETERS_LOSE.getMessage());
        }
        User existUser= (User) SecurityUtils.getSubject().getPrincipal();
        String imgPathStr = IndexController.class.getClassLoader().getResource("json/imgPathData.json").getPath();
        String jobJsonData = JsonUtil.readJsonFile(imgPathStr);
        JSONObject jobJob = JSON.parseObject(jobJsonData);
        ImgPath imgPathData = null;
        if(!IsEmptyUtils.isEmpty(jobJob.get(existUser.getType().toString()))){
            imgPathData = JSON.parseObject(jobJob.get(existUser.getType().toString()).toString(),ImgPath.class);
        }
        String filesPath = new SimpleDateFormat("yyyy/MM/dd/HH/mm/ss")
                .format(new Date());
        String imgName = UUID.randomUUID() + ".png";
        // 生成文件路径
        String imgPath = imgPathData.getLocalPath()+imgPathData.getSinglePath() +"/"+ filesPath;
        File fileDir = new File(imgPath + "\\");
        if (!fileDir.exists()) {
            fileDir.mkdirs();
        }
        String fileNamePath = imgPath+"/"+imgName;

        FileUploadUtil fileUploadUtil = new FileUploadUtil();
        if(fileUploadUtil.uploadBlobImgFile(blobFile,fileNamePath)){
            result.setSuccess(true);
            result.setResult(imgPathData.getImgPath()+imgPathData.getSinglePath()+"/"+filesPath+"/"+imgName);
            result.setResultCode(IStatusMessage.SystemStatus.SUCCESS.getCode());
            result.setMsg(IStatusMessage.SystemStatus.SUCCESS.getMessage());
        }else{
            result.setSuccess(false);
            result.setResultCode(IStatusMessage.SystemStatus.ERROR.getCode());
            result.setMsg(IStatusMessage.SystemStatus.ERROR.getMessage());
        }
    } catch (Exception e) {
        e.printStackTrace();
        logger.error("上传图片!异常!", e);
        result.setSuccess(false);
        result.setResultCode(IStatusMessage.SystemStatus.ERROR.getCode());
        result.setMsg(IStatusMessage.SystemStatus.ERROR.getMessage());
    }
    return result;
}

ImgPath类是用来区分不同点的映射的盘

3.FileUploadUtil类

public boolean uploadBlobImgFile(MultipartFile file, String fileNamePath){
        try {
            OutputStream out = new FileOutputStream(fileNamePath);
            out.write(file.getBytes());
            out.flush();
            out.close();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
}
虽然提供的引用中未直接涉及在Delphi UniGUI 1.90.0框架下使用ExtJS,将前端BLOB数据后端并存储到数据库的方法,但可以依据一般的编程逻辑和相关技术原理来阐述。 ### 前端(ExtJS)实现 在前端使用ExtJS将BLOB数据发送到后端,通常可以借助`Ext.Ajax.request`方法发送请求,并把BLOB数据作为请求的一部分递。以下是示例代码: ```javascript // 假设blobData是已经获取到的BLOB数据 var blobData = ...; Ext.Ajax.request({ url: 'backend_url', // 后端处理请求的URL method: 'POST', headers: { 'Content-Type': 'application/octet-stream' }, rawData: blobData, success: function(response) { console.log('数据发送成功'); }, failure: function(response) { console.log('数据发送失败'); } }); ``` ### 后端(Delphi UniGUI)实现 在后端使用Delphi UniGUI接收前端发送的BLOB数据,然后将其存储到数据库。以使用FireDAC组件访问数据库为例,以下是示例代码: ```delphi uses FireDAC.Comp.Client; procedure TForm1.UniGUIPageModuleCreate(Sender: TObject); var Stream: TStream; Query: TFDQuery; begin // 获取前端发送的BLOB数据 Stream := Request.InputStream; // 连接数据库 Query := TFDQuery.Create(nil); try Query.Connection := ...; // 设置数据库连接 Query.SQL.Text := 'INSERT INTO YourTable (BlobField) VALUES (:BlobValue)'; Query.Params[0].LoadFromStream(Stream, ftBlob); Query.ExecSQL; finally Query.Free; end; end; ``` ### 数据库操作 确保数据库表中有一个适合存储BLOB数据的字段,如在MySQL中可以使用`LONGBLOB`类型,在SQL Server中可以使用`VARBINARY(MAX)`类型。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值