文件上传工具--FileUtil
分片上传文件接口- package com.youmejava.chun.commoninterface;
- import com.youmejava.chun.util.FileUtil;
- import com.youmejava.chun.util.ResultVo;
- import com.youmejava.chun.util.StringUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiImplicitParam;
- import io.swagger.annotations.ApiImplicitParams;
- import io.swagger.annotations.ApiOperation;
- import org.apache.shiro.authc.ExpiredCredentialsException;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.MultipartHttpServletRequest;
- import javax.servlet.http.HttpServletRequest;
- import java.io.*;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- @RestController
- @RequestMapping("/api/apiSystem/upload")
- @Api(value = "文件上传", tags = "文件上传")
- public class UploadController {
- @Value("${filePath1}")
- private String filePath;
- @PostMapping("/register")
- @ApiOperation(value = "文件注册", notes = "文件注册")
- @ApiImplicitParams({@ApiImplicitParam(value = "哈希值", name = "hash", required = true, paramType = "body")})
- public ResultVo register(@RequestBody Map<String, Object> map) {
- System.out.println("hash: " + map.get("hash"));
- if (!StringUtil.isNotBlankAndNull(map.get("hash").toString())) {
- // return ResultVo.failure("哈希值不可为空");
- throw new ExpiredCredentialsException("哈希值不可为空!");
- }
- String _filePath=filePath;
- if (!_filePath.endsWith("/")) {
- _filePath+="/";
- }
- // String _pathStr = "C:\\Users\\JH-rent\\Desktop\\java启动文件\\test" + "\" + map.get("hash");
- String _pathStr=_filePath+map.get("hash");
- //创建不同的文件夹目录
- File file = new File(_pathStr);
- //判断文件夹是否存在
- if (!file.exists()) {
- //如果文件夹不存在,则创建新的的文件夹
- file.mkdirs();
- }
- File f = new File(_pathStr);
- // 检查目录是否已上传过文件,如果上传过,返回上传个数
- if (f.isDirectory()) {
- File dirFile = new File(_pathStr);
- File[] listFiles = dirFile.listFiles();
- List<File> list = Arrays.asList(listFiles);
- if (list == null&&list.size()>0) {
- Map<String, Object>map1=new HashMap<>();
- map1.put("number",list.size());
- return ResultVo.success(map1);
- }
- }
- return ResultVo.success();
- }
- @PostMapping("/uploadFile")
- @ResponseBody
- @ApiOperation(value = "上传文件", notes = "上传文件")
- @ApiImplicitParams({@ApiImplicitParam(value = "哈希值", name = "hash", required = true, paramType = "body"), @ApiImplicitParam(value = "文件流", name = "file", required = true, paramType = "body"), @ApiImplicitParam(value = "文件名称", name = "fileName", required = true, paramType = "body"),})
- public ResultVo uploadFile(HttpServletRequest request) {
- MultipartHttpServletRequest params = ((MultipartHttpServletRequest) request);
- List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
- String _fileName = params.getParameter("fileName");
- String _hash = params.getParameter("hash");
- if (!StringUtil.isNotBlankAndNull(_hash)) {
- throw new ExpiredCredentialsException("哈希值不可为空!");
- }
- if (!StringUtil.isNotBlankAndNull(_fileName)) {
- throw new ExpiredCredentialsException("文件名称不可为空!");
- }
- // System.out.println("_fileName: " + _fileName);
- // System.out.println("_hash: " + _hash);
- // System.out.println("files: " + files);
- // System.out.println(params.getParameter("file"));
- // String _pathStr = "C:\\Users\\JH-rent\\Desktop\\java启动文件\\test" + "\" + _hash + "\";
- String _filePath=filePath;
- if (!_filePath.endsWith("/")) {
- _filePath+="/";
- }
- String _pathStr =_filePath+_hash+"/";
- FileOutputStream fileOut = null;
- //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
- try {
- fileOut = new FileOutputStream(_pathStr + _fileName);
- BufferedOutputStream bos = new BufferedOutputStream(fileOut);
- BufferedInputStream bis = null;
- for (MultipartFile file : files) {
- // file.transferTo(new File(_pathStr + file.getOriginalFilename()));
- // System.out.println(file.getInputStream());
- bis = new BufferedInputStream(file.getInputStream());
- }
- byte[] buf = new byte[4096];
- int length = bis.read(buf);
- //保存文件
- while (length != -1) {
- bos.write(buf, 0, length);
- length = bis.read(buf);
- }
- bos.close();
- bis.close();
- return ResultVo.success();
- } catch (Exception e) {
- e.printStackTrace();
- return ResultVo.failure(e.getMessage());
- }
- }
- @GetMapping("/getMergeFile")
- @ApiOperation(value = "获取合并文件", notes = "获取合并文件")
- @ApiImplicitParams({@ApiImplicitParam(value = "哈希值", name = "hash", required = true, dataType = "String"), @ApiImplicitParam(value = "文件名称", name = "fileName", required = true, dataType = "String")})
- public ResultVo getMergeFile(@RequestParam(value = "hash") String hash, @RequestParam(value = "fileName") String fileName) {
- // String _pathStr = "C:\\Users\\JH-rent\\Desktop\\java启动文件\\test" + "\" + hash + "\";
- // String _pathStr1 = "C:\\Users\\JH-rent\\Desktop\\java启动文件\\test";
- String _filePath=filePath;
- if (!_filePath.endsWith("/")) {
- _filePath+="/";
- }
- String _pathStr = _filePath + hash + "/";
- String _pathStr1 = _filePath;
- try {
- // if (!_pathStr1.endsWith("\")) {
- // _pathStr1 += "\";
- // }
- _pathStr1 += fileName;
- FileUtil.mergeFile(_pathStr, _pathStr1);
- //合并成功删除加密文件
- FileUtil.deleteDirectory(_pathStr);
- } catch (IOException e) {
- e.printStackTrace();
- }
- Map<String, Object>map=new HashMap<>();
- map.put("fileUrl",_pathStr1);
- return ResultVo.success(map);
- }
- }
复制代码 前端分片链接:https://www.cnblogs.com/wxchun/p/15892243.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |