diff --git a/src/main/java/com/steadon/taotee/controller/UserInfoController.java b/src/main/java/com/steadon/taotee/controller/UserInfoController.java
index b0fbdfe00792d179f1fedb8dd35ac988beccc0a8..c841951539f986de880db981bcf5b79b9a0d68b1 100644
--- a/src/main/java/com/steadon/taotee/controller/UserInfoController.java
+++ b/src/main/java/com/steadon/taotee/controller/UserInfoController.java
@@ -4,9 +4,11 @@ import com.steadon.taotee.pojo.TaoTeeResult;
 import com.steadon.taotee.pojo.domain.dto.UserBaseDTO;
 import com.steadon.taotee.pojo.request.BaseInfoReq;
 import com.steadon.taotee.pojo.response.TokenRep;
+import com.steadon.taotee.pojo.response.UrlRep;
 import com.steadon.taotee.service.UserInfoService;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 @RestController
 @AllArgsConstructor
@@ -20,6 +22,11 @@ public class UserInfoController {
         return userInfoService.wxLogin(code);
     }
 
+    @PostMapping("/avatar/upload")
+    public TaoTeeResult<UrlRep> uploadAvatar(MultipartFile file) {
+        return userInfoService.uploadAvatar(file);
+    }
+
     @GetMapping("/user/base")
     public TaoTeeResult<UserBaseDTO> showBaseInfo() {
         return userInfoService.showBaseInfo();
diff --git a/src/main/java/com/steadon/taotee/pojo/domain/ImageMap.java b/src/main/java/com/steadon/taotee/pojo/domain/ImageMap.java
new file mode 100644
index 0000000000000000000000000000000000000000..7eec0727fdd80ca065ccdbc767c0231634450e0c
--- /dev/null
+++ b/src/main/java/com/steadon/taotee/pojo/domain/ImageMap.java
@@ -0,0 +1,27 @@
+package com.steadon.taotee.pojo.domain;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.io.Serializable;
+
+@Data
+@Document(collection = "image_map")
+public class ImageMap implements Serializable {
+
+    @Id
+    private String id;
+
+    private String url;
+
+    /**
+     * 1-post 2-avatar
+     */
+    private Integer usedFor;
+
+    public ImageMap(String url, Integer usedFor) {
+        this.url = url;
+        this.usedFor = usedFor;
+    }
+}
diff --git a/src/main/java/com/steadon/taotee/pojo/domain/PhotoMap.java b/src/main/java/com/steadon/taotee/pojo/domain/PhotoMap.java
deleted file mode 100644
index 154bb0a75bb827edc7462865c1566b4d0c5b0520..0000000000000000000000000000000000000000
--- a/src/main/java/com/steadon/taotee/pojo/domain/PhotoMap.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.steadon.taotee.pojo.domain;
-
-import lombok.Data;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.mongodb.core.mapping.Document;
-
-@Data
-@Document(collection = "photo_map")
-public class PhotoMap {
-
-    @Id
-    private String id;
-
-    private String url;
-}
diff --git a/src/main/java/com/steadon/taotee/repository/ImageMapRepository.java b/src/main/java/com/steadon/taotee/repository/ImageMapRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7ec3ff4109930d91f7cf9fb2ad7db60461e6462
--- /dev/null
+++ b/src/main/java/com/steadon/taotee/repository/ImageMapRepository.java
@@ -0,0 +1,7 @@
+package com.steadon.taotee.repository;
+
+import com.steadon.taotee.pojo.domain.ImageMap;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface ImageMapRepository extends MongoRepository<ImageMap, String> {
+}
diff --git a/src/main/java/com/steadon/taotee/repository/PhotoMapRepository.java b/src/main/java/com/steadon/taotee/repository/PhotoMapRepository.java
deleted file mode 100644
index a554ebfd50aa8ad5c7b882974780e4501a5d0fa9..0000000000000000000000000000000000000000
--- a/src/main/java/com/steadon/taotee/repository/PhotoMapRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.steadon.taotee.repository;
-
-import com.steadon.taotee.pojo.domain.PhotoMap;
-import org.springframework.data.mongodb.repository.MongoRepository;
-
-public interface PhotoMapRepository extends MongoRepository<PhotoMap, String> {
-}
diff --git a/src/main/java/com/steadon/taotee/service/UserInfoService.java b/src/main/java/com/steadon/taotee/service/UserInfoService.java
index a2f694072ee2c8fac191c43c5d9606daf2b93c68..1c99110b15ffce840221276fd91ec566e686a0b3 100644
--- a/src/main/java/com/steadon/taotee/service/UserInfoService.java
+++ b/src/main/java/com/steadon/taotee/service/UserInfoService.java
@@ -4,10 +4,14 @@ import com.steadon.taotee.pojo.TaoTeeResult;
 import com.steadon.taotee.pojo.domain.dto.UserBaseDTO;
 import com.steadon.taotee.pojo.request.BaseInfoReq;
 import com.steadon.taotee.pojo.response.TokenRep;
+import com.steadon.taotee.pojo.response.UrlRep;
+import org.springframework.web.multipart.MultipartFile;
 
 public interface UserInfoService {
     TaoTeeResult<TokenRep> wxLogin(String code);
 
+    TaoTeeResult<UrlRep> uploadAvatar(MultipartFile file);
+
     TaoTeeResult<UserBaseDTO> showBaseInfo();
 
     TaoTeeResult<UserBaseDTO> editBaseInfo(BaseInfoReq req);
diff --git a/src/main/java/com/steadon/taotee/service/impl/PostInfoServiceImpl.java b/src/main/java/com/steadon/taotee/service/impl/PostInfoServiceImpl.java
index c58ec42320b7c69739a4682fb5a0a97708ecce67..3c260858d90d2f4b1aa9e351970af72d0fd00bc1 100644
--- a/src/main/java/com/steadon/taotee/service/impl/PostInfoServiceImpl.java
+++ b/src/main/java/com/steadon/taotee/service/impl/PostInfoServiceImpl.java
@@ -2,13 +2,13 @@ package com.steadon.taotee.service.impl;
 
 import com.steadon.taotee.handler.TokenHandler;
 import com.steadon.taotee.pojo.TaoTeeResult;
-import com.steadon.taotee.pojo.domain.PhotoMap;
+import com.steadon.taotee.pojo.domain.ImageMap;
 import com.steadon.taotee.pojo.domain.PostInfo;
 import com.steadon.taotee.pojo.domain.dto.PostInfoDTO;
 import com.steadon.taotee.pojo.pageData.PageData;
 import com.steadon.taotee.pojo.request.PostInfoReq;
 import com.steadon.taotee.pojo.response.UrlRep;
-import com.steadon.taotee.repository.PhotoMapRepository;
+import com.steadon.taotee.repository.ImageMapRepository;
 import com.steadon.taotee.repository.PostInfoRepository;
 import com.steadon.taotee.service.PostInfoService;
 import com.steadon.taotee.utils.QiniuUtils;
@@ -31,7 +31,7 @@ public class PostInfoServiceImpl implements PostInfoService {
 
     private QiniuUtils qiniuUtils;
 
-    private PhotoMapRepository photoMapRepository;
+    private ImageMapRepository imageMapRepository;
     private PostInfoRepository postInfoRepository;
 
     @Override
@@ -39,9 +39,8 @@ public class PostInfoServiceImpl implements PostInfoService {
         String fileName = StringUtils.generateRandomString(8);
         String url = qiniuUtils.upload("photo", fileName, file);
 
-        PhotoMap photoMap = new PhotoMap();
-        photoMap.setUrl(url);
-        photoMapRepository.save(photoMap);
+        ImageMap imageMap = new ImageMap(url, 1);
+        imageMapRepository.save(imageMap);
         return TaoTeeResult.success(new UrlRep(url));
     }
 
diff --git a/src/main/java/com/steadon/taotee/service/impl/UserInfoServiceImpl.java b/src/main/java/com/steadon/taotee/service/impl/UserInfoServiceImpl.java
index 2f3e9bba86b520473fde98566f619ad2350a3819..4c64f6b8f0e3404b11198eb90719c65275461b3f 100644
--- a/src/main/java/com/steadon/taotee/service/impl/UserInfoServiceImpl.java
+++ b/src/main/java/com/steadon/taotee/service/impl/UserInfoServiceImpl.java
@@ -2,27 +2,35 @@ package com.steadon.taotee.service.impl;
 
 import com.steadon.taotee.handler.TokenHandler;
 import com.steadon.taotee.pojo.TaoTeeResult;
+import com.steadon.taotee.pojo.domain.ImageMap;
 import com.steadon.taotee.pojo.domain.UserInfo;
 import com.steadon.taotee.pojo.domain.dto.UserBaseDTO;
 import com.steadon.taotee.pojo.model.TokenModel;
 import com.steadon.taotee.pojo.request.BaseInfoReq;
 import com.steadon.taotee.pojo.response.TokenRep;
+import com.steadon.taotee.pojo.response.UrlRep;
+import com.steadon.taotee.repository.ImageMapRepository;
 import com.steadon.taotee.repository.UserInfoRepository;
 import com.steadon.taotee.service.UserInfoService;
+import com.steadon.taotee.utils.QiniuUtils;
+import com.steadon.taotee.utils.StringUtils;
 import com.steadon.taotee.utils.WechatUtils;
 import com.steadon.utils.TokenUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 @Service
 @AllArgsConstructor
 public class UserInfoServiceImpl implements UserInfoService {
 
+    private QiniuUtils qiniuUtils;
     private TokenUtils tokenUtils;
     private WechatUtils wechatUtils;
 
+    private ImageMapRepository imageMapRepository;
     private UserInfoRepository userInfoRepository;
 
     private MongoTemplate mongoTemplate;
@@ -52,11 +60,23 @@ public class UserInfoServiceImpl implements UserInfoService {
         return TaoTeeResult.success(rep);
     }
 
+    @Override
+    public TaoTeeResult<UrlRep> uploadAvatar(MultipartFile file) {
+        String fileName = StringUtils.generateRandomString(8);
+        String url = qiniuUtils.upload("avatar", fileName, file);
+
+        ImageMap imageMap = new ImageMap(url, 2);
+        imageMapRepository.save(imageMap);
+        return TaoTeeResult.success(new UrlRep(url));
+    }
+
     @Override
     public TaoTeeResult<UserBaseDTO> showBaseInfo() {
         String openid = TokenHandler.getModel().getOpenid();
         UserInfo userInfo = userInfoRepository.findUserInfoByOpenid(openid);
-
+        if (userInfo.getAvatar() == null) {
+            userInfo.setAvatar("https://image.taotee.sipc115.com/avatar/default");
+        }
         UserBaseDTO userBaseDTO = new UserBaseDTO();
         BeanUtils.copyProperties(userInfo, userBaseDTO);
         return TaoTeeResult.success(userBaseDTO);
@@ -67,9 +87,18 @@ public class UserInfoServiceImpl implements UserInfoService {
         String openid = TokenHandler.getModel().getOpenid();
         UserInfo userInfo = userInfoRepository.findUserInfoByOpenid(openid);
 
-        userInfo.setAvatar(req.getAvatar());
-        userInfo.setNickname(req.getNickname());
-        userInfo.setSignature(req.getSignature());
+        String avatar = req.getAvatar();
+        String nickname = req.getNickname();
+        String signature = req.getSignature();
+        if (avatar != null && !avatar.isEmpty()) {
+            userInfo.setAvatar(avatar);
+        }
+        if (nickname != null && !nickname.isEmpty()) {
+            userInfo.setNickname(nickname);
+        }
+        if (signature != null && !signature.isEmpty()) {
+            userInfo.setSignature(signature);
+        }
         UserInfo saved = mongoTemplate.save(userInfo);
 
         UserBaseDTO userBaseDTO = new UserBaseDTO();