Skip to content

Commit 9f8e55e

Browse files
committed
update with database
1 parent 64b1312 commit 9f8e55e

File tree

13 files changed

+375
-89
lines changed

13 files changed

+375
-89
lines changed

pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,22 @@
4141
<version>4.4.1-1</version>
4242
</dependency>
4343

44+
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
45+
<dependency>
46+
<groupId>javax.servlet</groupId>
47+
<artifactId>jstl</artifactId>
48+
<version>1.2</version>
49+
</dependency>
50+
<dependency>
51+
<groupId>org.springframework.boot</groupId>
52+
<artifactId>spring-boot-starter-data-jpa</artifactId>
53+
</dependency>
54+
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
55+
<dependency>
56+
<groupId>mysql</groupId>
57+
<artifactId>mysql-connector-java</artifactId>
58+
<version>8.0.19</version>
59+
</dependency>
4460
<dependency>
4561
<groupId>org.springframework.boot</groupId>
4662
<artifactId>spring-boot-starter-test</artifactId>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.springfileupload.app.controller;
2+
3+
import com.springfileupload.app.model.FileStore;
4+
import com.springfileupload.app.service.FileStoreService;
5+
import org.springframework.core.io.ByteArrayResource;
6+
import org.springframework.core.io.Resource;
7+
import org.springframework.http.HttpHeaders;
8+
import org.springframework.http.MediaType;
9+
import org.springframework.http.ResponseEntity;
10+
import org.springframework.stereotype.Controller;
11+
import org.springframework.ui.ModelMap;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.web.bind.annotation.RequestMethod;
14+
import org.springframework.web.bind.annotation.RequestParam;
15+
import org.springframework.web.multipart.MultipartFile;
16+
17+
@Controller
18+
public class FileStoreController {
19+
20+
private final FileStoreService fileStoreService;
21+
22+
public FileStoreController(FileStoreService fileStoreService) {
23+
this.fileStoreService = fileStoreService;
24+
}
25+
26+
@RequestMapping("/")
27+
public String index(ModelMap modelMap) {
28+
modelMap.addAttribute("fileList", fileStoreService.getAllFiles());
29+
return "index";
30+
}
31+
32+
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
33+
public String upload(@RequestParam("file") MultipartFile file, ModelMap modelMap) {
34+
35+
if (fileStoreService.saveFileToDB(file) != null && fileStoreService.saveFileToLocal(file)) {
36+
modelMap.addAttribute("msg", "file is uploaded Successfully");
37+
} else {
38+
modelMap.addAttribute("msg", "sorry!file is not uploaded");
39+
}
40+
41+
modelMap.addAttribute("fileList", fileStoreService.getAllFiles());
42+
return "index";
43+
}
44+
45+
46+
@RequestMapping("/download")
47+
public ResponseEntity<Resource> downloadFile(@RequestParam("id") int id) {
48+
FileStore fileStore = fileStoreService.getFileStoreById(id);
49+
return ResponseEntity.ok()
50+
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileStore.getFileName() + "\"")
51+
.body(new ByteArrayResource(fileStore.getFile()));
52+
}
53+
54+
@RequestMapping("/delete")
55+
public String deleteFile(@RequestParam("id") int id, ModelMap map) {
56+
try {
57+
fileStoreService.deleteFileFromLocal(fileStoreService.getFileStoreById(id));
58+
fileStoreService.deleteFileFromDB(id);
59+
map.addAttribute("msg", "file is deleted");
60+
map.addAttribute("fileList", fileStoreService.getAllFiles());
61+
} catch (Exception exception) {
62+
map.addAttribute("$msg", "file is not deleted");
63+
}
64+
return "index";
65+
}
66+
67+
}

src/main/java/com/springfileupload/app/controller/FileUploadController.java

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.springfileupload.app.model;
2+
3+
import javax.persistence.*;
4+
import java.sql.Timestamp;
5+
import java.util.Arrays;
6+
import java.util.Objects;
7+
8+
@Entity
9+
@Table(name = "file_store", schema = "files")
10+
public class FileStore {
11+
private int id;
12+
private String fileName;
13+
private byte[] file;
14+
private Timestamp updatedDate;
15+
16+
@Id
17+
@Column(name = "id", nullable = false)
18+
public int getId() {
19+
return id;
20+
}
21+
22+
public void setId(int id) {
23+
this.id = id;
24+
}
25+
26+
@Basic
27+
@Column(name = "file_name", nullable = false, length = 30)
28+
public String getFileName() {
29+
return fileName;
30+
}
31+
32+
public void setFileName(String fileName) {
33+
this.fileName = fileName;
34+
}
35+
36+
37+
@Basic
38+
@Column(name = "file", nullable = false)
39+
public byte[] getFile() {
40+
return file;
41+
}
42+
43+
public void setFile(byte[] file) {
44+
this.file = file;
45+
}
46+
47+
@Basic
48+
@Column(name = "updated_date", nullable = false)
49+
public Timestamp getUpdatedDate() {
50+
return updatedDate;
51+
}
52+
53+
public void setUpdatedDate(Timestamp updatedDate) {
54+
this.updatedDate = updatedDate;
55+
}
56+
57+
@Override
58+
public boolean equals(Object o) {
59+
if (this == o) return true;
60+
if (o == null || getClass() != o.getClass()) return false;
61+
FileStore fileStore = (FileStore) o;
62+
return id == fileStore.id &&
63+
Objects.equals(fileName, fileStore.fileName) &&
64+
Arrays.equals(file, fileStore.file) &&
65+
Objects.equals(updatedDate, fileStore.updatedDate);
66+
}
67+
68+
@Override
69+
public int hashCode() {
70+
int result = Objects.hash(id, fileName, updatedDate);
71+
result = 31 * result + Arrays.hashCode(file);
72+
return result;
73+
}
74+
75+
@Override
76+
public String toString() {
77+
return "FileStore{" +
78+
"id=" + id +
79+
", fileName='" + fileName + '\'' +
80+
", file=" + Arrays.toString(file) +
81+
", updatedDate=" + updatedDate +
82+
'}';
83+
}
84+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.springfileupload.app.repo;
2+
3+
import com.springfileupload.app.model.FileStore;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface FileStoreRepository extends JpaRepository<FileStore ,Integer> {
7+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.springfileupload.app.service;
2+
3+
import com.springfileupload.app.model.FileStore;
4+
import org.springframework.web.multipart.MultipartFile;
5+
6+
import java.util.List;
7+
8+
public interface FileStoreService {
9+
boolean saveFileToLocal(MultipartFile multipartFile);
10+
11+
FileStore saveFileToDB(MultipartFile multipartFile);
12+
13+
FileStore getFileStoreById(int fileId);
14+
15+
List<FileStore> getAllFiles();
16+
17+
void deleteFileFromDB(int fileId);
18+
19+
void deleteFileFromLocal(FileStore fileStore);
20+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.springfileupload.app.service;
2+
3+
import com.springfileupload.app.model.FileStore;
4+
import com.springfileupload.app.repo.FileStoreRepository;
5+
import org.springframework.beans.factory.annotation.Value;
6+
import org.springframework.stereotype.Service;
7+
import org.springframework.util.StringUtils;
8+
import org.springframework.web.multipart.MultipartFile;
9+
10+
import java.io.IOException;
11+
import java.io.InputStream;
12+
import java.nio.file.Files;
13+
import java.nio.file.Path;
14+
import java.nio.file.Paths;
15+
import java.util.List;
16+
import java.util.Objects;
17+
18+
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
19+
20+
@Service
21+
public class FileStoreServiceImpl implements FileStoreService {
22+
23+
@Value(value = "${com.fileupload.upload.folder.path}")
24+
private String folderPath;
25+
26+
private final FileStoreRepository fileStoreRepository;
27+
28+
public FileStoreServiceImpl(FileStoreRepository fileStoreRepository) {
29+
this.fileStoreRepository = fileStoreRepository;
30+
}
31+
32+
@Override
33+
public boolean saveFileToLocal(MultipartFile file) {
34+
String fileName = getFileName(file);
35+
36+
if (isValidFile(fileName, file)) {
37+
try {
38+
InputStream inputStream = file.getInputStream();
39+
Files.copy(inputStream, Paths.get(folderPath + fileName), REPLACE_EXISTING);
40+
return true;
41+
} catch (IOException e) {
42+
e.printStackTrace();
43+
}
44+
}
45+
return false;
46+
}
47+
48+
@Override
49+
public FileStore saveFileToDB(MultipartFile file) {
50+
FileStore fileStore = new FileStore();
51+
String fileName = getFileName(file);
52+
53+
if (isValidFile(fileName, file)) {
54+
try {
55+
fileStore.setFileName(fileName);
56+
fileStore.setFile(file.getBytes());
57+
} catch (IOException e) {
58+
e.printStackTrace();
59+
}
60+
}
61+
return fileStoreRepository.save(fileStore);
62+
}
63+
64+
@Override
65+
public FileStore getFileStoreById(int id) {
66+
return fileStoreRepository.findById(id).get();
67+
68+
}
69+
70+
@Override
71+
public List<FileStore> getAllFiles() {
72+
return fileStoreRepository.findAll();
73+
}
74+
75+
@Override
76+
public void deleteFileFromDB(int fileId) {
77+
fileStoreRepository.deleteById(fileId);
78+
}
79+
80+
@Override
81+
public void deleteFileFromLocal(FileStore fileStore) {
82+
String fileName = fileStore.getFileName();
83+
84+
try {
85+
Files.deleteIfExists(Path.of(folderPath+fileName));
86+
} catch (IOException e) {
87+
e.printStackTrace();
88+
}
89+
90+
}
91+
92+
public String getFileName(MultipartFile file) {
93+
return StringUtils.cleanPath(Objects.requireNonNull(file.getOriginalFilename()));
94+
}
95+
96+
public boolean isValidFile(String fileName, MultipartFile file) {
97+
return !file.isEmpty() && !fileName.contains("..");
98+
}
99+
100+
101+
}

src/main/java/com/springfileupload/app/service/FileUploadService.java

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/main/java/com/springfileupload/app/service/FileUploadServiceImpl.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)