diff --git a/src/main/java/com/teaching/backend/controller/CommonController.java b/src/main/java/com/teaching/backend/controller/CommonController.java index 00bb8d3..daceb35 100644 --- a/src/main/java/com/teaching/backend/controller/CommonController.java +++ b/src/main/java/com/teaching/backend/controller/CommonController.java @@ -3,8 +3,11 @@ package com.teaching.backend.controller; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.OSSObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.teaching.backend.common.BaseResponse; import com.teaching.backend.common.ResultUtils; import com.teaching.backend.model.entity.FileTable; @@ -97,45 +100,31 @@ public class CommonController { public BaseResponse download(@RequestParam String courseId, @RequestParam String path, HttpServletResponse response) throws IOException { System.out.println("执行了下载的方法"); - FileTable fileTable = fileTableService.getById(courseId); - System.out.println(fileTable); + fileTableService.download(courseId,path,response,endpoint,accessKeyId,accessKeySecret,bucketName); - // 创建OSS客户端 - OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + return ResultUtils.success("成功"); + } - String key = extractKeyFromFullPath(fileTable.getFilePath()); - OSSObject object = ossClient.getObject(bucketName, key); +@GetMapping("/get/record") + public BaseResponse> pageBaseResponse(int page,int pageSize){ - String fileName = fileTable.getFileName(); + Page pageInfo=new Page<>(page,pageSize); - // 设置保存文件的路径 - String savePath = path + "/" + fileName; + LambdaQueryWrapper lambdaQueryWrapper=new LambdaQueryWrapper<>(); + + + fileTableService.page(pageInfo, lambdaQueryWrapper); + + return ResultUtils.success(pageInfo); + +} - // 获取文件的输入流 - InputStream inputStream = object.getObjectContent(); - // 设置响应头 - response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment; filename=" + fileName); - // 创建保存文件 - File saveFile = new File(savePath); - // 将文件内容复制到保存文件中 - FileUtils.copyInputStreamToFile(inputStream, saveFile); - // 关闭输入流和OSS客户端 - inputStream.close(); - ossClient.shutdown(); - return ResultUtils.success("成功"); - } - private String extractKeyFromFullPath(String filePath) { - // 提取存储桶名称 - String key = filePath.substring(filePath.indexOf("com") + 4, filePath.indexOf("?")); - return key; - } } diff --git a/src/main/java/com/teaching/backend/service/FileTableService.java b/src/main/java/com/teaching/backend/service/FileTableService.java index 4499d92..f00933f 100644 --- a/src/main/java/com/teaching/backend/service/FileTableService.java +++ b/src/main/java/com/teaching/backend/service/FileTableService.java @@ -3,6 +3,9 @@ package com.teaching.backend.service; import com.baomidou.mybatisplus.extension.service.IService; import com.teaching.backend.model.entity.FileTable; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + /** * ClassName: FileTableService * Package: com.teaching.backend.service @@ -16,10 +19,5 @@ public interface FileTableService extends IService { void updateFile(String courseId, String fileName, String filePath); - - - - - - + void download(String courseId, String path, HttpServletResponse response, String endpoint, String accessKeyId, String accessKeySecret, String bucketName) throws IOException; } diff --git a/src/main/java/com/teaching/backend/service/impl/FileTableServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/FileTableServiceImpl.java index a4c3e07..cecf46d 100644 --- a/src/main/java/com/teaching/backend/service/impl/FileTableServiceImpl.java +++ b/src/main/java/com/teaching/backend/service/impl/FileTableServiceImpl.java @@ -1,12 +1,21 @@ package com.teaching.backend.service.impl; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.OSSObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.teaching.backend.mapper.FileTableMapper; import com.teaching.backend.model.entity.FileTable; import com.teaching.backend.service.FileTableService; +import org.apache.commons.io.FileUtils; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + /** * ClassName: FileTableImpl * Package: com.teaching.backend.service.impl @@ -34,73 +43,55 @@ public class FileTableServiceImpl extends ServiceImpl // this.save(fileTable); // 使用save方法来添加新的记录 UpdateWrapper fileTableUpdateWrapper = new UpdateWrapper<>(); - fileTableUpdateWrapper.eq("id", courseId); + fileTableUpdateWrapper.eq("course_id", courseId); this.update(fileTable, fileTableUpdateWrapper); - }} + } + @Override + public void download(String courseId, String path, HttpServletResponse response, String endpoint, String accessKeyId, String accessKeySecret, String bucketName) throws IOException { -// @Override -// public String getPath(String courseId, String basePath) { -// -// FileTable courseFile = this.getById(courseId); -// -// System.out.println("1111111111111111111111" + courseFile); -// -// String FileName = basePath + courseFile.getFilePath(); -// -// System.out.println("这是往前端方法返回的值" + FileName); -// return FileName; -// } + FileTable fileTable = this.getById(courseId); + System.out.println(fileTable); + + // 创建OSS客户端 + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + + String key = extractKeyFromFullPath(fileTable.getFilePath()); + OSSObject object = ossClient.getObject(bucketName, key); + + String fileName = fileTable.getFileName(); + + // 设置保存文件的路径 + String savePath = path + "/" + fileName; + + // 获取文件的输入流 + InputStream inputStream = object.getObjectContent(); + + // 设置响应头 + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment; filename=" + fileName); + + // 创建保存文件 + File saveFile = new File(savePath); + + // 将文件内容复制到保存文件中 + FileUtils.copyInputStreamToFile(inputStream, saveFile); + + // 关闭输入流和OSS客户端 + inputStream.close(); + ossClient.shutdown(); + } + + private String extractKeyFromFullPath(String filePath) { + // 提取存储桶名称 + String key = filePath.substring(filePath.indexOf("com") + 4, filePath.indexOf("?")); + return key; + } + +} -// @Override -// public void download(String courseId, HttpServletResponse response, String endpoint) { -// OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, accessSecret); -// -// try { -// -// FileTable courseFile = this.getById(courseId); -// -// System.out.println(courseFile); -// -// if (courseFile != null) { -// String fileName = courseFile.getFileName(); -// String filePath = courseFile.getFilePath(); -// System.out.println("要下载的文件是:" + basePath + filePath); -// -// File file = new File(basePath, filePath); -// -// if (file.exists()) { -// FileInputStream fileInputStream = new FileInputStream(file); -// -// ServletOutputStream outputStream = response.getOutputStream(); -// -// response.setContentType("application/octet-stream"); -// response.setHeader("Content-Disposition", "attachment; filename=" + fileName); -// -// byte[] buffer = new byte[1024]; -// int len; -// while ((len = fileInputStream.read(buffer)) > 0) { -// outputStream.write(buffer, 0, len); -// } -// -// outputStream.flush(); -// fileInputStream.close(); -// outputStream.close(); -// } else { -// System.out.println("文件不存在"); -// } -// } else { -// System.out.println("文件不存在或未找到相关记录"); -// } -// -// } catch (IOException e) { -// e.printStackTrace(); -// } -// -// -//} diff --git a/src/main/java/com/teaching/backend/utils/AliOssTest.java b/src/main/java/com/teaching/backend/utils/AliOssTest.java deleted file mode 100644 index 55f0f8f..0000000 --- a/src/main/java/com/teaching/backend/utils/AliOssTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.teaching.backend.utils; - -import com.aliyun.oss.ClientException; -import com.aliyun.oss.OSS; -import com.aliyun.oss.OSSClientBuilder; -import com.aliyun.oss.OSSException; -import com.aliyun.oss.common.auth.CredentialsProviderFactory; -import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider; -import com.aliyun.oss.model.PutObjectRequest; -import com.aliyun.oss.model.PutObjectResult; - -import java.awt.*; -import java.io.FileInputStream; -import java.io.InputStream; - -public class AliOssTest { - public static void main(String[] args) throws Exception { - // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。因为是华中地区 所以需要加上-lr - String endpoint = "oss-cn-wuhan-lr.aliyuncs.com"; - - // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 -// EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); - String accessKeyId ="LTAI5tFkdu3y5WddxbjgaG2F"; - String accessKeySecret ="1xUchxUTlmUBoTV5JQIrKsVjSkmsLF"; - - // 填写Bucket名称,例如examplebucket。 - String bucketName = "ceshi132132"; - // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 - String objectName = "ceshi/33.docx"; - // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。 - // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 - String filePath= "C:\\Users\\jian\\Desktop\\123345\\999\\33.docx"; - - // 创建OSSClient实例。 - OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); -// OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); - - - try { - InputStream inputStream = new FileInputStream(filePath); - // 创建PutObjectRequest对象。 - PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); - // 设置该属性可以返回response。如果不设置,则返回的response为空。 - putObjectRequest.setProcess("true"); - // 创建PutObject请求。 - PutObjectResult result = ossClient.putObject(putObjectRequest); - // 如果上传成功,则返回200。 - System.out.println(result.getResponse().getStatusCode()); - } catch (OSSException oe) { - System.out.println("Caught an OSSException, which means your request made it to OSS, " - + "but was rejected with an error response for some reason."); - System.out.println("Error Message:" + oe.getErrorMessage()); - System.out.println("Error Code:" + oe.getErrorCode()); - System.out.println("Request ID:" + oe.getRequestId()); - System.out.println("Host ID:" + oe.getHostId()); - } catch (ClientException ce) { - System.out.println("Caught an ClientException, which means the client encountered " - + "a serious internal problem while trying to communicate with OSS, " - + "such as not being able to access the network."); - System.out.println("Error Message:" + ce.getMessage()); - } finally { - if (ossClient != null) { - ossClient.shutdown(); - } - } - } -} - diff --git a/src/test/java/com/teaching/TeachingBackendApplicationTests.java b/src/test/java/com/teaching/TeachingBackendApplicationTests.java index c93912f..47da1f0 100644 --- a/src/test/java/com/teaching/TeachingBackendApplicationTests.java +++ b/src/test/java/com/teaching/TeachingBackendApplicationTests.java @@ -1,113 +1,9 @@ package com.teaching; -import com.teaching.backend.common.BaseResponse; -import com.teaching.backend.common.ResultUtils; -import com.teaching.backend.model.entity.User; -import com.teaching.backend.service.UserService; -import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.web.bind.annotation.GetMapping; - -import javax.annotation.Resource; -import java.sql.SQLOutput; -import java.util.*; @SpringBootTest class TeachingBackendApplicationTests { - @Resource - UserService userService; - @Test - void contextLoads() { - //获取用户集合 - List userList=userService.list() ; - System.out.println("这是用户集合表"+userList); - - //将数据存进map集合中 - Map> userBlogLikes=new HashMap<>(); - - - //遍历userList集合 - for (User user:userList){ - int userId = user.getUserid(); - int bokeId = user.getBokeid(); - int type = user.getType(); - - userBlogLikes.computeIfAbsent(userId, k -> new HashMap<>()).put(bokeId, type); - - } - - System.out.println("这是用户集合的map表:"+userBlogLikes); - -// 选择一个用户 - int userId = 1; - // 找到与该用户相似度最高的用户 - int mostSimilarUser = findMostSimilarUser(userId, userBlogLikes); - - - if (mostSimilarUser < 0) { - System.out.println("No similar user found."); - return; - } - - System.out.println("这是相似度最高的用户"+mostSimilarUser); - - // 根据相似用户的点赞记录推荐博客 - Set recommendedBlogs = recommendBlogs(userId, mostSimilarUser, userBlogLikes); - - System.out.println("Recommended blogs for user " + userId + ": " + recommendedBlogs); - - } - - - - - public static int findMostSimilarUser(int userId, Map> userBlogLikes) { - - int mostSimilarUser = -1; - int maxSimilarity = 0; - - Map targetUserLikes = userBlogLikes.get(userId); - - for (Map.Entry> entry : userBlogLikes.entrySet()) { - if (entry.getKey() != userId) { - int similarity = calculateSimilarity(targetUserLikes, entry.getValue()); - if (similarity > maxSimilarity) { - maxSimilarity = similarity; - mostSimilarUser = entry.getKey(); - } - } - } - return mostSimilarUser; - } - - public static int calculateSimilarity(Map user1Likes, Map user2Likes) { - int similarity = 0; - - for (Map.Entry entry : user1Likes.entrySet()) { - int blogId = entry.getKey(); - - if (user2Likes.containsKey(blogId) && user2Likes.get(blogId) == 1) { - similarity++; - } - } - return similarity; - } - public static Set recommendBlogs(int userId, int similarUserId, Map> userBlogLikes) { - - Set recommendedBlogs = new HashSet<>(); - - Map targetUserLikes = userBlogLikes.get(userId); - Map similarUserLikes = userBlogLikes.get(similarUserId); - - for (Map.Entry entry : similarUserLikes.entrySet()) { - int blogId = entry.getKey(); - - if (!targetUserLikes.containsKey(blogId) || targetUserLikes.get(blogId) == 0) { - recommendedBlogs.add(blogId); - } - } - return recommendedBlogs; - } }