@GetMapping("/files/{filename:.+}")
@ResponseBody
public ResponseEntity<Resource> getFile(@PathVariable String filename) {
Resource file = storageService.load(filename);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"").body(file);
}
@PostMapping("/upload")
public ResponseEntity<JSONObject> uploadFile(@RequestParam("file") MultipartFile file, @RequestHeader HttpHeaders headers) {
JSONObject message = new JSONObject();
String email = helpers.GetUserFromToken(headers);
System.out.println(file);
String filename = file.getOriginalFilename();
String extension =filename.substring(filename.lastIndexOf(".") + 1);
Long fileSize = file.getSize();
String[] nameArray = new String[]{"jpg", "png", "jpeg"};
List<String> array = new ArrayList<String>(Arrays.asList(nameArray));
if(array.contains(extension.toLowerCase()) && (fileSize/1025 < 500)){
try {
String FileName = storageService.save(file);
message.put("status","success");
message.put("msg","Uploaded the file successfully: " + FileName);
userServices.UpdateProfilePic(email,FileName);
return ResponseEntity.status(HttpStatus.OK).body(message);
} catch (Exception e) {
message.put("status","error");
message.put("msg","Could not upload the file: " + file.getOriginalFilename() + ". Error: " + e.getMessage());
return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(message);
}
}else{
message.put("status","error");
message.put("msg","incorrect file format or file size");
if(!array.contains(extension.toLowerCase())){
message.put("format_allowed","jpg,png,jpeg");
}
if( (fileSize/1025 > 500)){
message.put("file_size","the file Size Should be blow 500kb");
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(message);
}
}
......
package it.XYZ.storage;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.net.MalformedURLException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Service
public class StorageServiceImp implements StorageService{
private final Path root = Paths.get("uploads");
@Override
public String save(MultipartFile file) {
String newName = "";
try {
String filename = file.getOriginalFilename();
String extension =filename.substring(filename.lastIndexOf(".") + 1);
newName = String.valueOf(System.currentTimeMillis()).concat("."+extension);
Files.copy(file.getInputStream(), this.root.resolve(newName));
} catch (Exception e) {
if (e instanceof FileAlreadyExistsException) {
throw new RuntimeException("A file of that name already exists.");
}
throw new RuntimeException(e.getMessage());
}
return newName;
}
@Override
public Resource load(String filename) {
try {
Path file = root.resolve(filename);
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;
} else {
throw new RuntimeException("Could not read the file!");
}
} catch (MalformedURLException e) {
throw new RuntimeException("Error: " + e.getMessage());
}
}
@Override
public void deleteFile(String FileName) {
try {
File existingFile = new File(this.root.resolve(FileName).toUri());
if (existingFile.exists() && existingFile.isFile()) {
existingFile.delete();
}
}catch (Exception e){
}
}
}