前后端分离实现图片上传

由于我有点赶,就没有将按照标准去写service和serviceImpl了,请见谅

目录

目录

1.准备阶段1.1数据库

​1.2相关的类

1.2.1 UserImg与数据库的表相对应

  1.2.2  RespBean用来返回json格式        

  1.2.3  UserImgMapper

 1.2.4 UserImgMapper.xml

1.2.5 UserAddPhoto 用来接收前端传来的json

1.2.6 UserChangePhoto用来接收前端json的工具类

2.Controller的相关方法

2.2将数据库的图片以base64加密后返回给前端

2.3查看历史头像,将数据库中该用户的所有头像以json格式返回给前端,图片仍然以base64进行了加密


目录

1.准备阶段
1.1数据库

1.2相关的类

1.2.1 UserImg与数据库的表相对应

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserImg {
    private String id;
    private byte[] photo;
}


  1.2.2  RespBean用来返回json格式
        

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RespBean {
    private long code;
 
    private String msg;
 
    private Object object;
 
 
    public static RespBean success(String msg) {
        return new RespBean(200, msg, null);
    }
    public static RespBean success(Object object) {
        return new RespBean(200,null ,object);
    }
    public static RespBean success(String msg, Object object) {
        return new RespBean(200, msg, object);
    }
 
 
    public static RespBean error(String msg) {
        return new RespBean(500, msg, null);
    }
 
 
    public static RespBean error(String msg,Object object) {
        return new RespBean(500, msg, object);
    }
}

 


  1.2.3  UserImgMapper

@Mapper
@Repository
public interface UserImgMapper extends BaseMapper<UserImg> {
    void insertPhoto(@Param("e") UserImg photo);
    List<UserImg> findAllImgById(String userId);
}


 1.2.4 UserImgMapper.xml

1.2.5 UserAddPhoto 用来接收前端传来的json

import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author CC
 * @describe
 * @create 2021-11-12-12:15
 */
@Data
public class UserAddPhoto {
    private byte[] bytes;
    private String userId;
}

1.2.6 UserChangePhoto用来接收前端json的工具类

/**
 * @author CC
 * @describe
 * @create 2021-11-12-12:43
 */
@Data
public class UserChangePhoto {
    private String userId;
}

2.Controller的相关方法

        2.1 文件上传(前端给后端传来经base64编码的图片和该用户的id,后端用UserAddPhoto来接收)

  @PostMapping("/user/addimg")
    private RespBean addimg(@RequestBody UserAddPhoto userAddPhoto){
        byte[] bytes = userAddPhoto.getBytes();
        String userId = userAddPhoto.getUserId();
        try {
            byte[] data;
            data = bytes;
            UserImg photo = new UserImg();
            photo.setId(userId);
            photo.setPhoto(data);
            userimgMapper.insertPhoto(photo);
        }catch (Exception e){
            e.printStackTrace();
            return RespBean.error("上传失败");
        }
        return RespBean.success("上传成功");
    }

 

其中userId,bytes均为前端传来的, userId为用户的id,bytes为图片经过base64编码后的字节数组。

2.2将数据库的图片以base64加密后返回给前端

    /**
     * 确认修改头像
     * @return
     */
    @RequestMapping("/user/change")
    public  RespBean change(@RequestBody UserChangePhoto userChangePhoto){
        String userId = userChangePhoto.getUserId();
        List<UserImg> allImgById = userimgMapper.findAllImgById(userId);
        if (allImgById.size()<1){
            return RespBean.error("更改错误");
        }
        UserImg userImg = allImgById.get(allImgById.size()-1);
        return RespBean.success("更改成功",userImg);
    }

其中上面的userId为返回给前端的用户id,下面的就是数据库中图片经过base64编码后的字节数组,前端可以将其进行base64解码后还原成图片。

2.3查看历史头像,将数据库中该用户的所有头像以json格式返回给前端,图片仍然以base64进行了加密

 @RequestMapping("/user/historyImg")
    public  RespBean historyImg(@RequestBody UserChangePhoto userChangePhoto){
        String userId = userChangePhoto.getUserId();
        List<UserImg> allImgById = userimgMapper.findAllImgById(userId);
        if (allImgById.size()<1){
            return RespBean.error("历史头像为空");
        }
        return RespBean.success(allImgById);
    }

 

 其中上面的userId为返回给前端的用户id,下面的就是数据库中该用户所使用过的图片经过base64编码后的字节数组,前端可以将其进行base64解码后还原成图片。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Django 中实现前后端分离图片上传,可以通过以下步骤来完成: 1. 在前端页面中添加一个文件上传的表单,例如: ```html <form enctype="multipart/form-data" method="POST"> {% csrf_token %} <input type="file" name="image"> <button type="submit">上传</button> </form> ``` 2. 在 Django 后端中编写一个视图函数来处理图片上传请求,例如: ```python from django.http import JsonResponse def upload_image(request): if request.method == 'POST' and request.FILES['image']: image = request.FILES['image'] # 处理上传的图片,例如保存到本地或上传到云存储 # ... # 返回上传结果 return JsonResponse({'status': 'success', 'url': 'http://example.com/path/to/image'}) else: return JsonResponse({'status': 'error', 'message': '上传失败'}) ``` 3. 在前端页面中使用 AJAX 技术将图片上传请求发送到后端,并在上传成功后显示上传结果,例如: ```javascript $('form').submit(function(event) { event.preventDefault(); var formData = new FormData(this); $.ajax({ url: '/upload_image/', type: 'POST', data: formData, processData: false, contentType: false, success: function(response) { if (response.status == 'success') { // 显示上传成功的图片 $('#image').attr('src', response.url); } else { alert('上传失败:' + response.message); } }, error: function(xhr, status, error) { alert('上传失败:' + error); } }); }); ``` 其中,`/upload_image/` 是后端处理图片上传请求的 URL,`FormData` 对象可以将表单数据序列化为一个 `multipart/form-data` 格式的字符串,`processData: false` 和 `contentType: false` 参数可以避免 jQuery 对表单数据进行默认的处理,从而实现上传文件的功能。上传成功后,可以通过 `response.url` 获取上传的图片的 URL,并显示在页面上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值