Java实现文件上传(mysql、MongoDB、OSS)
- 文件上传
1.1 Mysql
MySQL中存储文件数据的字段类型为longblob类型,将文件流转成byte数组赋值给实体,然后插入到数据库中
1 public String uploadFile(MultipartFile upfile) { 2 AuditFiles file = AuditFiles.FACTORY.create(); 3 file.setFileId(getUUID()); 4 file.setFileName(upfile.getResource().getFilename()); 5 file.setFileSave("F"); 6 file.setFileType(upfile.getContentType()); 7 file.setFileSize((int)upfile.getSize()); 8 try { 9 file.setContent(toByteArray(upfile.getInputStream())); 10 } catch (IOException e) { 11 // TODO 自动生成的 catch 块 12 e.printStackTrace(); 13 } 14 DatabaseUtil.insertEntity("default", file); 15 return file.getFileId(); 16 } 17 18 private byte[] toByteArray(InputStream input) throws IOException { 19 ByteArrayOutputStream output = new ByteArrayOutputStream(); 20 byte[] buffer = new byte[1024*4]; 21 int n = 0; 22 while (-1 != (n = input.read(buffer))) { 23 output.write(buffer, 0, n); 24 } 25 return output.toByteArray(); 26 }
1.2 MongoDB
MongoDB需要添加对应的pom依赖
1 <dependency> 2 <groupId>org.mongodb</groupId> 3 <artifactId>mongo-java-driver</artifactId> 4 <version>3.12.7</version> 5 </dependency>
MongoDB工具类,获取MongoDB连接信息
1 public class MongodbUtil { 2 //获取库的地址 3 public static String MONGODB_PATH = ""; 4 //库的名称 5 public static String MONGODB_DBNAME = ""; 6 //schame 7 public static String MONGODB_NAME = ""; 8 private static MongoClient mongoClient; 9 10 static { 11 MongoClientOptions options = MongoClientOptions.builder().sslEnabled(false).maxConnectionIdleTime(3000).build(); 12 mongoClient = new MongoClient(new ServerAddress(MONGODB_PATH,27017),options); 13 } 14 15 public static MongoDatabase getConnect() { 16 return mongoClient.getDatabase(MONGODB_DBNAME); 17 } 18 19 public static DB getDB(){ 20 return mongoClient.getDB(MONGODB_DBNAME); 21 } 22 }
文件上传
1 public String uploadFile(MultipartFile upFile) { 2 String id = getUUID(); 3 try { 4 GridFS gridFs = new GridFS(MongodbUtil.getDB(),"files"); 5 GridFSInputFile gridFSInputFile = gridFs.createFile(upFile.getBytes()); 6 gridFSInputFile.setId(id); 7 gridFSInputFile.setFilename(upFile.getOriginalFilename()); 8 gridFSInputFile.setContentType(upFile.getContentType()); 9 gridFSInputFile.save(); 10 } catch (IOException e) { 11 e.printStackTrace(); 12 } 13 return id; 14 }
1.3 OSS文件上传
1 // END_POIND,ACCESS_KEY_ID,ACCESS_KEY_SECRET为OSS文件服务器对应的标识(字符串),由文件服务器第三方提供 2 public String uploadFile(MultipartFile upFile) { 3 OSS ossClient = null; 4 String id = getUUID(); 5 try { 6 log.info("上传文件{}到{}开始", upFile.getOriginalFilename(), id); 7 ossClient = new OSSClientBuilder().build(END_POIND, ACCESS_KEY_ID, ACCESS_KEY_SECRET); 8 } catch (Exception e) { 9 log.error(e.getMessage()); 10 } finally { 11 if (ossClient != null) { 12 ossClient.shutdown(); 13 } 14 } 15 return id; 16 }