目录
公司目前用到文件上传,考虑到费用等情况,可以在公司自己的服务器上搭建一下。本人记录minio的使用情况。
“前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。
1.安装
docker run -p 9000:9000 -p 9090:9090 \ --name minio \ -d --restart=always \ -e "MINIO_ROOT_USER=minioadmin" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ -v /mydata/minio/data:/data \ minio/minio server \ /data --console-address ":9090" -address ":9000"
MinIO 部署开始使用默认的根凭据minioadmin:minioadmin。您可以使用 MinIO 控制台测试部署,这是一个内置于 MinIO 服务器的嵌入式对象浏览器。将主机上运行的 Web 浏览器指向http://127.0.0.1:9000并使用根凭据登录。您可以使用浏览器创建存储桶、上传对象以及浏览 MinIO 服务器的内容。
注意:要使用持久存储部署 MinIO,您必须使用该podman -v选项将本地持久目录从主机操作系统映射到容器。例如,-v /mnt/data:/data将主机操作系统驱动器映射/mnt/data到/data容器上。
要覆盖MinIO的自动生成的密钥,您可以将Access和Secret密钥设为环境变量。 MinIO允许常规字符串作为Access和Secret密钥。
/mydata/minio/data // 数据卷存放路径(自行添加)
2.页面web访问
浏览器中访问
http:ip/9000 或者 http:ip/9090 都可以。
密码就是:
-e “MINIO_ROOT_USER=
minioadmin
”-e “MINIO_ROOT_PASSWORD=
minioadmin
” \
docker启动时时候指定的 。
3.在界面上传
- 先创建个bucket。
- 点击上传
列表的文件是我刚上传的。900多M差不多几十秒上传完毕。
4.使用api上传
@PostMapping(value = {"/uploadFile"}) @ApiOperation(value = "上传文件,支持批量上传") @ApiImplicitParam(name = "files",value = "文件对象",dataType = "File") public ApiResult uploadFile(@RequestParam("files") List<MultipartFile> files) { log.info(files.toString()); if (CollectionUtils.isEmpty(files)) { return ApiResult.error("未选择文件!"); } List<MinioResponseDTO> MinioResponseDTOList = new ArrayList<>(); for (MultipartFile file : files) { String originalFilename = file.getOriginalFilename(); // 获取文件拓展名 String extName = FileUtil.extName(originalFilename); log.info("文件拓展名:" + extName); // 生成新的文件名,存入到minio long millSeconds = Instant.now().toEpochMilli(); String minioFileName = millSeconds + RandomStringUtils.randomNumeric(12) + "." + extName; String contentType = file.getContentType(); log.info("文件mime:{}", contentType); // 返回文件大小,单位字节 long size = file.getSize(); log.info("文件大小:" + size); try { String bucketName = minioConfig.getBucketName(); minioClientUtils.putObject(bucketName, file, minioFileName); String fileUrl = minioClientUtils.getObjectUrl(bucketName, minioFileName); MinioFile minioFile = new MinioFile(); minioFile.setOriginalFileName(originalFilename); minioFile.setFileExtName(extName); minioFile.setFileName(minioFileName); minioFile.setFileSize(size); minioFile.setMime(contentType); minioFile.setIsDelete(NumberUtils.INTEGER_ZERO); minioFile.setFileUrl(fileUrl); boolean insert = minioFile.insert(); if (insert) {//文件地址写入数据库 MinioResponseDTO minioResponseDTO = new MinioResponseDTO(); minioResponseDTO.setFileId(minioFile.getId()); minioResponseDTO.setOriginalFileName(originalFilename); minioResponseDTO.setFileUrl(fileUrl); MinioResponseDTOList.add(minioResponseDTO); } } catch (Exception e) { log.error("上传文件出错:{}", e); return ApiResult.error("上传文件出错"); } } return ApiResult.success(MinioResponseDTOList); }
5.使用api下载
@GetMapping("/download") @ApiOperation(value = "下载文件") public void downloadFile(@RequestParam("fileUrl") String fileUrl, HttpServletResponse response) throws IOException { if (StringUtils.isBlank(fileUrl)){ response.setHeader("Content-type","text/html;charset=UTF-8"); String msg = "文件下载失败"; OutputStream ps = response.getOutputStream(); ps.write(msg.getBytes(StandardCharsets.UTF_8)); return; } try { //拿到文件路径 String url = fileUrl.split("9000/")[1]; //获取文件对象 InputStream object = minioClientUtils.getObject(MinioConstant.FSP_DEV, url.substring(url.indexOf("/") + 1)); byte[] bytes = new byte[1024]; int len = 0; response.reset(); response.setHeader("Content-Disposition","attachment/filename="+ URLEncoder.encode(url.substring(url.lastIndexOf("/")+1),"UTF-8")); response.setContentType("application/octet-stream");//将文件下载到浏览器 // response.setContentType("image/jpeg");//浏览器直接展示图片 response.setCharacterEncoding("UTF-8"); OutputStream stream = response.getOutputStream(); while ((len = object.read(bytes))>0){ stream.write(bytes,0,len); } stream.close(); }catch (Exception e){ response.setHeader("Content-type","text/html;charset=UTF-8"); String data = "文件下载失败"; OutputStream ps = response.getOutputStream(); ps.write(data.getBytes(StandardCharsets.UTF_8)); } }
直接在浏览器输入 :
http://localhost:8081/download?fileUrl=http://192.168.196.100:9000/fsp-dev/1675150054071022817109203.csv
源码地址:
https://github.com/hufanglei/minio-demo.git
大功告成,完!!