姜钧瀚第3次提交 文件上传下载

master
小萌新 6 months ago
parent d8fba50336
commit 03758c7d3b
  1. 45
      src/main/java/com/teaching/backend/controller/CommonController.java
  2. 10
      src/main/java/com/teaching/backend/service/FileTableService.java
  3. 113
      src/main/java/com/teaching/backend/service/impl/FileTableServiceImpl.java
  4. 68
      src/main/java/com/teaching/backend/utils/AliOssTest.java
  5. 104
      src/test/java/com/teaching/TeachingBackendApplicationTests.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<String> 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<Page<FileTable>> pageBaseResponse(int page,int pageSize){
String fileName = fileTable.getFileName();
Page<FileTable> pageInfo=new Page<>(page,pageSize);
// 设置保存文件的路径
String savePath = path + "/" + fileName;
LambdaQueryWrapper<FileTable> 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;
}
}

@ -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<FileTable> {
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;
}

@ -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<FileTableMapper,FileTable>
// this.save(fileTable); // 使用save方法来添加新的记录
UpdateWrapper<FileTable> 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();
// }
//
//
//}

@ -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();
}
}
}
}

@ -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<User> userList=userService.list() ;
System.out.println("这是用户集合表"+userList);
//将数据存进map集合中
Map<Integer,Map<Integer,Integer>> 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<Integer> recommendedBlogs = recommendBlogs(userId, mostSimilarUser, userBlogLikes);
System.out.println("Recommended blogs for user " + userId + ": " + recommendedBlogs);
}
public static int findMostSimilarUser(int userId, Map<Integer, Map<Integer, Integer>> userBlogLikes) {
int mostSimilarUser = -1;
int maxSimilarity = 0;
Map<Integer, Integer> targetUserLikes = userBlogLikes.get(userId);
for (Map.Entry<Integer, Map<Integer, Integer>> 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<Integer, Integer> user1Likes, Map<Integer, Integer> user2Likes) {
int similarity = 0;
for (Map.Entry<Integer, Integer> entry : user1Likes.entrySet()) {
int blogId = entry.getKey();
if (user2Likes.containsKey(blogId) && user2Likes.get(blogId) == 1) {
similarity++;
}
}
return similarity;
}
public static Set<Integer> recommendBlogs(int userId, int similarUserId, Map<Integer, Map<Integer, Integer>> userBlogLikes) {
Set<Integer> recommendedBlogs = new HashSet<>();
Map<Integer, Integer> targetUserLikes = userBlogLikes.get(userId);
Map<Integer, Integer> similarUserLikes = userBlogLikes.get(similarUserId);
for (Map.Entry<Integer, Integer> entry : similarUserLikes.entrySet()) {
int blogId = entry.getKey();
if (!targetUserLikes.containsKey(blogId) || targetUserLikes.get(blogId) == 0) {
recommendedBlogs.add(blogId);
}
}
return recommendedBlogs;
}
}

Loading…
Cancel
Save