package com.huixinpn.dionysus.controller;
import com.huixinpn.dionysus.domain.user.User;
import com.huixinpn.dionysus.repository.user.UserRepository;
import com.huixinpn.dionysus.storage.StorageException;
import com.huixinpn.dionysus.storage.StorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
@RequestMapping("/api/v1")
public class FileUploadController {
private StorageService storage;
@Autowired
private UserRepository userRepository;
@Autowired
public void setStorageService(StorageService service) {
this.storage = service;
}
@RequestMapping(value = "/upload", method = RequestMethod.GET)
public @ResponseBody String provideUploadInfo() {
return "You can upload a file by posting to this same URL.";
}
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody UploadResult handleFileUpload(
@RequestParam("file") MultipartFile file) throws StorageException {
if (!file.isEmpty()) {
try {
String id = storage.save(file.getBytes());
String link = storage.url(id);
return new UploadResult(link);
} catch (IOException e) {
throw new StorageException(e.getMessage());
}
}
return new UploadResult("");
}
@RequestMapping(value = "/upload/avatar", method = RequestMethod.POST)
public @ResponseBody UploadResult handleAvatarUpload(@RequestParam("file") MultipartFile file) throws StorageException {
if(!file.isEmpty()){
try{
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof User){
User login = (User) principal;
User login_data = userRepository.findOne(login.getId());
String id = storage.save(file.getBytes());
String link = storage.url(id);
login_data.setAvatar(link);
userRepository.saveAndFlush(login_data);
return new UploadResult(link);
}
} catch (IOException e){
throw new StorageException(e.getMessage());
}
}
return new UploadResult("");
}
}