Java+Springboot搭建一个在线网盘文件分享系统攻略
1.准备工作
1.1 Java环境配置
首先需要安装Java运行环境,下载地址为:https://www.java.com/en/download/
1.2 Springboot环境配置
Springboot是一个基于Spring框架的轻量级web应用开发框架,可以方便地快速搭建web应用。使用Maven构建Springboot应用,并添加对应的依赖。
2.创建项目
使用IDEA创建一个Springboot项目,添加对应的依赖,其中包含以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
3.实现文件上传、下载、删除功能
3.1 文件上传
使用Springboot提供的MultipartFile接收上传文件的请求,将文件上传到指定的目录下,并将文件信息以实体类的形式存储到数据库中。示例代码如下:
@PostMapping("/uploadFile")
public ResponseResult uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
return ResponseResult.failed("文件不能为空");
}
String fileName = file.getOriginalFilename();
String filePath = "/data/upload/";
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
FileEntity fileEntity = new FileEntity();
fileEntity.setName(fileName);
fileEntity.setPath(filePath + fileName);
fileEntity.setSize(file.getSize() / 1024 + "KB");
fileEntity.setType(fileName.substring(fileName.lastIndexOf(".") + 1));
fileEntity.setUploadTime(new Date());
fileRepository.save(fileEntity);
return ResponseResult.success("文件上传成功");
} catch (IOException e) {
e.printStackTrace();
return ResponseResult.failed("文件上传失败");
}
}
3.2 文件下载
使用Springboot的ResponseEntity返回下载文件的请求,将文件以流的形式输出,实现文件下载。示例代码如下:
@GetMapping("/downloadFile/{id}")
public ResponseEntity<ByteArrayResource> downloadFile(@PathVariable("id") Long id, HttpServletResponse response) throws IOException {
FileEntity fileEntity = fileRepository.findById(id).orElse(null);
if (fileEntity == null) {
throw new RuntimeException("文件不存在");
}
File file = new File(fileEntity.getPath());
ByteArrayResource resource = new ByteArrayResource(FileUtils.readFileToByteArray(file));
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileEntity.getName() + "\"");
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
headers.setContentLength(file.length());
return ResponseEntity.ok().headers(headers).body(resource);
}
3.3 文件删除
使用Springboot的DeleteMapping实现文件删除功能,将文件在本地目录下删除,并在数据库中将对应的文件信息删除。示例代码如下:
@DeleteMapping("/deleteFile/{id}")
public ResponseResult deleteFile(@PathVariable("id") Long id) {
FileEntity fileEntity = fileRepository.findById(id).orElse(null);
if (fileEntity == null) {
throw new RuntimeException("文件不存在");
}
File file = new File(fileEntity.getPath());
if (file.exists()) {
file.delete();
}
fileRepository.deleteById(id);
return ResponseResult.success("文件删除成功");
}
4.实现登录和权限控制功能
使用Springboot提供的Security功能实现用户的登录和权限控制功能。
4.1 用户登录
使用Springboot提供的AuthenticationManager和UserDetailsService服务实现用户的登录验证功能。示例代码如下:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService customUserDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/login", "/register").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/index")
.failureUrl("/login?error=true")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.permitAll()
.and()
.exceptionHandling()
.accessDeniedPage("/403");
}
}
4.2 权限控制
使用Springboot提供的@PreAuthorize注解实现权限控制功能,示例代码如下:
@PreAuthorize("hasRole('ROLE_ADMIN')")
@GetMapping("/admin")
public ResponseResult admin() {
return ResponseResult.success("管理员页面");
}
@PreAuthorize("hasRole('ROLE_USER')")
@GetMapping("/user")
public ResponseResult user() {
return ResponseResult.success("普通用户页面");
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java+Springboot搭建一个在线网盘文件分享系统 - Python技术站