【java小程式】上傳頭像的功能實現。
阿新 • • 發佈:2018-12-21
上傳頭像小程式端的頁面程式碼和前面的登出程式碼一樣,可以去【java小程式實戰】小程式登出功能實現檢視
文章目錄
小程式端的js實現(mine.js)
1、微信小程式的圖片選擇,可以使用微信開發API中的wx.chooseImage.
2、上傳檔案API,wx.uploadFile
//上傳頭像 changeFace: function (){ var me = this; console.log("changeFace"); //從本地相簿選擇照片或使用相機拍照 wx.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['album'], success: function(res) { var temFilePaths = res.tempFilePaths; console.log(temFilePaths); wx.showLoading({ title: '上傳中...', }) var serverUrl = app.serverUrl; //上傳api,成功返回獲取的data是string型別,需要進行格式化 wx.uploadFile({ url: serverUrl+'/user/uploadFace?userId='+app.userInfo.id, filePath: temFilePaths[0], name: 'file', header:{ 'content-type':'application/json' }, success:function(res){ var data = JSON.parse(res.data); console.log(data); wx.hideLoading(); if(data.status == 200){ wx.showToast({ title: '上傳成功!', icon: "success" }); var imageUrl = data.data;//獲取照片的地址 me.setData({ faceUrl: serverUrl + imageUrl }) console.log(me.data.faceUrl); } else if(data.status == 500){ wx.showToast({ title: data.msg, }); } } }) }, }) }
java後臺程式碼:
1、UserService介面
/**
* 使用者修改資訊
* @param users
*/
public void updataUserInfo(Users users);
2、UserServiceImpl實現類
上傳頭像成功後,將使用者表中頭像地址進行修改
@Override public void updataUserInfo(Users users) { Example userExample = new Example(Users.class); Criteria criteria = userExample.createCriteria(); criteria.andEqualTo("id", users.getId()); usersMapper.updateByExampleSelective(users, userExample); }
3、UserController介面實現
1、將使用者上傳的頭像,儲存在指定的檔案目錄下。
2、將頭像的相對路徑儲存在資料庫,並將地址返回給前端。
@RestController
@Api(value = "使用者相關業務介面", tags = {"使用者相關業務的controller"})
@RequestMapping("/user")
public class UserController extends BasicController {
@Autowired
private UserService userService;
@ApiOperation(value="使用者上傳頭像" ,notes = "使用者上傳頭像的介面")
@ApiImplicitParam(name = "userId", value = "使用者id",required = true,
dataType = "String", paramType = "query")
@PostMapping("/uploadFace")
public IMoocJSONResult uploadFace(String userId, @RequestParam("file")MultipartFile[] files) throws Exception {
if(StringUtils.isBlank(userId)){
return IMoocJSONResult.errorMsg("使用者Id不能為空");
}
//檔案儲存的名稱空間
String fileSpace = "G:\\imooc-video-dev";
//儲存到資料庫的相對路徑
String uploadPathDB = "\\" + userId + "\\face";
InputStream inputStream = null;
FileOutputStream fileOutputStream = null;
try{
if(files != null && files.length > 0){
//獲取上傳的檔名
String fileName = files[0].getOriginalFilename();
//如果檔名不為空
if(StringUtils.isNotBlank(fileName)) {
//檔案上傳的最終儲存路徑
String finalFacePath = fileSpace + uploadPathDB + "\\" +fileName;
//設定資料庫儲存的路徑
uploadPathDB += ("\\" + fileName);
//建立檔案
File outFile = new File(finalFacePath);
//判斷outFile檔案的父類檔案不為null ,並且不是資料夾
if (outFile.getParentFile() !=null || !outFile.getParentFile().isDirectory()) {
//建立父資料夾
outFile.getParentFile().mkdirs();
}
// 輸出檔案流
fileOutputStream = new FileOutputStream(outFile);
//輸入流
inputStream = files[0].getInputStream();
//將上傳的檔案copy到 路徑下。
IOUtils.copy(inputStream, fileOutputStream);
}
} else {
return IMoocJSONResult.errorMsg("上傳出錯...");
}
} catch (Exception e){
e.printStackTrace();
return IMoocJSONResult.errorMsg("上傳出錯...");
} finally {
//關閉流
if(fileOutputStream != null) {
fileOutputStream.flush();
fileOutputStream.close();
}
}
//修改使用者資訊
Users users = new Users();
users.setId(userId);
users.setFaceImage(uploadPathDB);
userService.updataUserInfo(users);
String str = uploadPathDB.replace("\\","/");
return IMoocJSONResult.ok(str);
}
}
將圖片通過web可以訪問,進行虛擬路徑配置
在application 的同級下,建立一個WebMvcConfig類
通過這樣的配置類,進行配置,後臺啟動完畢,可以直接在瀏覽器進行訪問。
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/")
.addResourceLocations("file:G:/imooc-video-dev/");
}
}