1.服务提供者:
package net.longjin.file.controller; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.coobird.thumbnailator.Thumbnails; import net.longjin.comm.log.SysOpLog; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import com.alibaba.fastjson.JSON; import net.longjin.comm.utils.FileStringUtils; import net.longjin.comm.utils.Contents; import net.longjin.comm.utils.TokenUtils; import net.longjin.entity.entityCase.FileObject; import net.longjin.entity.system.Results; import net.longjin.file.service.FileService; @RestController @RequestMapping("/file") public class FileController { private static final Logger log = LoggerFactory.getLogger(FileController.class); @Value("${file.fileBasePath}") private String fileBasePath; @Autowired private FileService fileService; //文件下载 @SysOpLog(value = "下载文件") @RequestMapping("/downLoad/{fileId}") public String downloadFile( @PathVariable String fileId,@RequestHeader("token") String token) { HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); if(fileId==null||fileId.trim().equals("")){ printInfo("fileId为空!",response); return null; } //获取文件名将文件保存在临时目录 try { FileObject fb = fileService.getFileInfo(fileId); if(fb!=null) { String fileName = fb.getFileSaveName(); if (fileName != null) { //设置文件路径 File file = new File(fileBasePath +"/"+fb.getAnnexType()+"/"+ fb.getFilePath()+"/" + fileName); if (file.exists()) { response.setContentType("application/force-download");// 设置强制下载不打开 response.setContentType("multipart/form-data;charset=UTF-8");//设置一下UTF-8 response.setHeader("Content-Disposition", "attachment;fileName=" + new String(fb.getFileName().getBytes("utf-8"), "ISO-8859-1")); byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } log.info(fileName + "<<<<下载成功"); } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }else{ printInfo("文件不存在!",response); } }else{ printInfo("附件中心文件名称为空!",response); } }else{ printInfo("文件没有上传!",response); } }catch (Exception e){ e.printStackTrace(); } return null; } //文件在线打开 @RequestMapping("/open/{fileId}") public void openFile(@PathVariable String fileId) { HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); if(fileId==null||fileId.trim().equals("")){ printInfo("fileId为空",response); }else { //获取文件文件保存目录 FileObject fb = fileService.getFileInfo(fileId); try { if (fb != null) { File file = new File(fileBasePath + "/" +fb.getAnnexType()+"/"+ fb.getFilePath() + "/" + fb.getFileSaveName()); String fileName = fb.getFileName(); if (fileName != null) { //设置文件路径 if (file.exists()) { FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); try { if (fb.getFileType().equals("png")) { response.setContentType("image/png"); } else if (fb.getFileType().equals("jpg")) { response.setContentType("image/jpeg"); } else if (fb.getFileType().equals("bmp")) { response.setContentType("image/bmp"); } else if (fb.getFileType().equals("pdf")) { response.setContentType("application/pdf"); } os = response.getOutputStream(); //创建输出流 byte[] b = new byte[1024]; while (fis.read(b) != -1) { os.write(b); } os.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } else { printInfo("文件不存在!", response); } } catch (Exception e) { e.printStackTrace(); } } } /** * 单个文件上传 * @param makeThumbnail 是否制作缩略图 * @param annexType 附件所属类型 * @return */ @SysOpLog(value = "上传单个文件") @RequestMapping(value = "/upload/{annexType}/{makeThumbnail}") public Results upload(@PathVariable Integer makeThumbnail, @PathVariable String annexType, @RequestPart(value = "file") MultipartFile file, @RequestHeader("token") String token, @RequestHeader(value = "tenantId",defaultValue="v1") String tenantId) { Results rs = new Results(); if(annexType==null||annexType.trim().equals("")){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【annexType】附件类型为空!"); return rs; } if(!Arrays.asList("caseSimpleFile","caseNormalFile","caseTemplate","personPic").contains(annexType)){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【annexType】附件类型格式不正确!"); return rs; } if(makeThumbnail==null){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("是否制作缩略图没有值,必须要填写"); return rs; } if(makeThumbnail!=0&&makeThumbnail!=1){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【makeThumbnail】是否制作缩略图值错误,1表示制作,0表示不制作"); return rs; } String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); if(!Arrays.asList("jpg","png","bmp","doc","docx","pdf").contains(suffix)){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("上传文件格式不正确!"); return rs; } try { String userId = TokenUtils.validTokenUserId(token); String userName = TokenUtils.validTokenUserName(token); Long uploadTime = System.currentTimeMillis(); //文件存放路径 String filePath = FileStringUtils.getDateForString(System.currentTimeMillis()+"", "yyyy") //年份 + "/" + FileStringUtils.getDateForString(System.currentTimeMillis()+"", "MM") //月份 + "/" + FileStringUtils.getDateForString(System.currentTimeMillis()+"", "dd"); File tmpPath = new File(fileBasePath +"/"+annexType+"/"+ filePath); if (!tmpPath.exists()){//若此目录不存在,则创建 tmpPath.mkdirs(); log.info("创建目录路径为:"+ filePath); } if (null != file) { log.info("保存上传文件:"+ file.getName()); //生成文件的名称和缩略图的文件名称 Long temp = System.nanoTime(); String fileSaveName = temp + "." + suffix; String localPath = fileBasePath +"/"+annexType+"/"+ filePath +"/"+ fileSaveName; File dest = new File(localPath); file.transferTo(dest); String fileId = FileStringUtils.getUUID(); //文件文件保存进file表内容 FileObject cf = new FileObject(); cf.setFileId(fileId); cf.setAnnexType(annexType); cf.setFileName(fileName); cf.setFilePath(filePath); cf.setFileSaveName(fileSaveName); cf.setFileType(suffix); cf.setUploadUserId(userId); cf.setUploadTime(uploadTime); cf.setUploadUserName(userName); cf.setTenantId(tenantId); fileService.saveCaseFile(cf); String[] listFile = new String[1]; if(makeThumbnail==1&&!Arrays.asList("doc","docx","pdf").contains(suffix)) { FileObject thumbnailFile = new FileObject(); //缩略图信息 String thumbnailFileId = FileStringUtils.getUUID(); String thumbnailSaveName = temp + "_thumbnail." + suffix; String thumbnailFileName = getFileNameNoEx(fileName) + "_thumbnail." + suffix; Thumbnails.of(localPath).scale(1f).outputQuality(0.15f).toFile(fileBasePath+"/"+annexType+"/"+filePath+"/" + thumbnailSaveName); thumbnailFile.setFileId(thumbnailFileId); thumbnailFile.setAnnexType(annexType); thumbnailFile.setFileName(thumbnailFileName); thumbnailFile.setFilePath(filePath); thumbnailFile.setFileSaveName(thumbnailSaveName); thumbnailFile.setFileType(suffix); thumbnailFile.setUploadUserId(userId); thumbnailFile.setUploadTime(uploadTime); thumbnailFile.setUploadUserName(userName); thumbnailFile.setTenantId(tenantId); int t = fileService.saveCaseFile(thumbnailFile); //保存进案件关联的文书表中 listFile[0]=fileId + "-" + thumbnailFileId; }else{ listFile[0]=fileId; } rs.setStatusCode(Contents.requestSuccess); rs.setStatusMsg("上传文件成功"); Map<String, Object> map = new HashMap<String, Object>(); map.put("fileIdList",listFile); rs.setResMap(map); rs.setTimestamp(System.currentTimeMillis()); return rs; }else{ rs.setStatusCode(Contents.requestSuccess); rs.setStatusMsg("没有上传文件"); return rs; } }catch(Exception e){ e.printStackTrace(); rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("上传失败"); } log.info(JSON.toJSONString(rs)); return rs; } /** * 多个文件上传 * @param makeThumbnail 是否制作缩略图 * @param annexType 附件所属类型 * @return */ @SysOpLog(value = "上传多个文件") @RequestMapping("/uploads/{annexType}/{makeThumbnail}") public Results uploads(@PathVariable Integer makeThumbnail, @PathVariable String annexType, @RequestHeader("token") String token, @RequestHeader(value = "tenantId",defaultValue = "v1") String tenantId, @RequestPart(value = "file") MultipartFile[] files) { Results rs = new Results(); if(annexType==null||annexType.trim().equals("")){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【annexType】附件类型为空!"); return rs; } if(!Arrays.asList("caseSimpleFile","caseNormalFile","caseTemplate","personPic").contains(annexType)){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【annexType】附件类型格式不正确!"); return rs; } if(makeThumbnail==null){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【makeThumbnail】是否制作缩略图没有值,必须要填写"); return rs; } if(makeThumbnail!=0&&makeThumbnail!=1){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("【makeThumbnail】是否制作缩略图值错误,1表示制作,0表示不制作"); return rs; } //验证上传的文件是否符合格式 for(MultipartFile file : files){ String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); if(!Arrays.asList("jpg","png","bmp","doc","docx","pdf").contains(suffix)){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("上传文件格式不正确!"); return rs; } } try { String userId = TokenUtils.validTokenUserId(token); String userName = TokenUtils.validTokenUserName(token); Long uploadTime = System.currentTimeMillis(); //文件存放路径 String filePath = FileStringUtils.getDateForString(System.currentTimeMillis()+"", "yyyy") //年份 + "/" + FileStringUtils.getDateForString(System.currentTimeMillis()+"", "MM") //月份 + "/" + FileStringUtils.getDateForString(System.currentTimeMillis()+"", "dd"); File tmpPath = new File(fileBasePath +"/"+annexType+"/"+ filePath); if (!tmpPath.exists()){//若此目录不存在,则创建 tmpPath.mkdirs(); log.info("创建目录路径为:"+ filePath); } int count = 0; if (null != files && files.length > 0) { String[] listFile = new String[files.length]; for (MultipartFile file : files) { log.info("保存上传文件:"+ file.getName()); String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); //生成文件的名称和缩略图的文件名称 Long temp = System.nanoTime(); String fileSaveName = temp + "." + suffix; String localPath = fileBasePath +"/"+annexType+"/"+ filePath +"/"+ fileSaveName; File dest = new File(localPath); file.transferTo(dest); String fileId = FileStringUtils.getUUID(); //文件文件保存进file表内容 FileObject cf = new FileObject(); cf.setFileId(fileId); cf.setAnnexType(annexType); cf.setFileName(fileName); cf.setFilePath(filePath); cf.setFileSaveName(fileSaveName); cf.setFileType(suffix); cf.setUploadUserId(userId); cf.setUploadTime(uploadTime); cf.setUploadUserName(userName); cf.setTenantId(tenantId); fileService.saveCaseFile(cf); if(makeThumbnail==1&&!Arrays.asList("doc","docx","pdf").contains(suffix)) { FileObject thumbnailFile = new FileObject(); //缩略图信息 String thumbnailFileId = FileStringUtils.getUUID(); String thumbnailSaveName = temp + "_thumbnail." + suffix; String thumbnailFileName = getFileNameNoEx(fileName) + "_thumbnail." + suffix; Thumbnails.of(localPath).scale(1f).outputQuality(0.15f).toFile(fileBasePath+"/"+annexType+"/"+filePath+"/" + thumbnailSaveName); thumbnailFile.setFileId(thumbnailFileId); thumbnailFile.setAnnexType(annexType); thumbnailFile.setFileName(thumbnailFileName); thumbnailFile.setFilePath(filePath); thumbnailFile.setFileSaveName(thumbnailSaveName); thumbnailFile.setFileType(suffix); thumbnailFile.setUploadUserId(userId); thumbnailFile.setUploadTime(uploadTime); thumbnailFile.setUploadUserName(userName); thumbnailFile.setTenantId(tenantId); int t = fileService.saveCaseFile(thumbnailFile); //保存进案件关联的文书表中 listFile[count]=fileId + "-" + thumbnailFileId; }else{ listFile[count]=fileId; } count++; } rs.setStatusCode(Contents.requestSuccess); rs.setStatusMsg("上传文件成功"+count+"个"); Map<String, Object> map = new HashMap<String, Object>(); map.put("fileIdList",listFile); rs.setResMap(map); rs.setTimestamp(System.currentTimeMillis()); return rs; }else{ rs.setStatusCode(Contents.requestSuccess); rs.setStatusMsg("没有上传文件"); return rs; } }catch(Exception e){ e.printStackTrace(); rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("上传失败"); } log.info(JSON.toJSONString(rs)); return rs; } public static String getFileNameNoEx(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot >-1) && (dot < (filename.length()))) { return filename.substring(0, dot); } } return filename; } /** * 专门用来删除文件的请求 * 暂时不支持PC删除 * 后期需要调整删除方法支持各种请求来源 * @param fileIds 多个ID用中划线连接 * @return */ @SysOpLog(value = "删除文件") @RequestMapping("/deleteFile/{fileIds}") public Results deleteAppFile(@PathVariable String fileIds,@RequestHeader("token") String token) { Results rs = new Results(); if(fileIds==null||fileIds.equals("")){ rs.setStatusCode(Contents.requestFail); rs.setStatusMsg("删除文书失败,附件ID为空!"); return rs; } String[] file = fileIds.split("-"); int count = 0; for(String f :file) { FileObject fb = fileService.getFileInfo(f); File filePath = new File(fileBasePath + "/" + fb.getFilePath() + "/" + fb.getFileSaveName()); filePath.delete(); fileService.deleteFileId(f); count++; } rs.setStatusCode(Contents.requestSuccess); rs.setStatusMsg("删除文书成功"+count+"个"); log.info(JSON.toJSONString(rs)); return rs; } /** * 通用返回内容流 * @param contents * @param response */ public void printInfo(String contents,HttpServletResponse response){ PrintWriter writer = null; response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=utf-8"); try { writer = response.getWriter(); writer.print(contents); } catch (IOException e) { log.info(e.getMessage()); } finally { if (writer != null) writer.close(); } } }
2.FeignClient客户端
package net.longjin.feignClient; import feign.Response; import net.longjin.comm.handle.FeignMultipartSupportConfig; import net.longjin.entity.system.Results; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; /** * 描述:FileFeignClient * * @author 何志鹏 * @ClassName:FileFeignClient * @create 2019-10-08 13:43 * Version 1.0 */ @FeignClient(name="annexCenter",path = "ac",configuration = FeignMultipartSupportConfig.class) public interface FileFeignClient { /** * 文件下载 * @param fileId * @param token * @return */ @RequestMapping(value="/file/downLoad/{fileId}") public Response download(@PathVariable String fileId,@RequestHeader("token") String token) ; /** * 文件删除 * @param fileIds * @param token * @return */ @RequestMapping("/file/deleteFile/{fileIds}") public String deleteAppFile(@PathVariable String fileIds, @RequestHeader("token") String token); /** * 单文件上传 * @param makeThumbnail * @param annexType * @param file * @param token * @param tenantId * @return */ @RequestMapping( value = "/file/upload/{annexType}/{makeThumbnail}",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Results upload(@PathVariable Integer makeThumbnail, @PathVariable String annexType, @RequestPart("file") MultipartFile file, @RequestHeader("token") String token, @RequestHeader(value = "tenantId",defaultValue="v1") String tenantId); /** * 多文件上传 * @param makeThumbnail * @param annexType * @param file * @param token * @param tenantId * @return */ @RequestMapping( value = "/file/uploads/{annexType}/{makeThumbnail}",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Results upload2(@PathVariable Integer makeThumbnail, @PathVariable String annexType, @RequestPart("file") MultipartFile[] file, @RequestHeader("token") String token, @RequestHeader(value = "tenantId",defaultValue="v1") String tenantId); }
3.通过Feign调用进行多文件上传需要进行的配置
package net.longjin.comm.handle; import feign.RequestTemplate; import feign.codec.EncodeException; import feign.codec.Encoder; import feign.form.ContentType; import feign.form.FormEncoder; import feign.form.MultipartFormContentProcessor; import feign.form.spring.SpringManyMultipartFilesWriter; import feign.form.spring.SpringSingleMultipartFileWriter; import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.cloud.openfeign.support.SpringEncoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.multipart.MultipartFile; import java.lang.reflect.Type; import java.util.*; /*** * @Auther: chengjianliang * @Date: 2019/10/10 */ @Configuration public class FeignMultipartSupportConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean public Encoder feignEncoder() { return new SpringMultipartEncoder(new SpringEncoder(messageConverters)); } private class SpringMultipartEncoder extends FormEncoder { public SpringMultipartEncoder(Encoder delegate) { super(delegate); MultipartFormContentProcessor processor = (MultipartFormContentProcessor)this.getContentProcessor(ContentType.MULTIPART); processor.addFirstWriter(new SpringSingleMultipartFileWriter()); processor.addFirstWriter(new SpringManyMultipartFilesWriter()); } @Override public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (bodyType.equals(MultipartFile[].class)) { MultipartFile[] files = (MultipartFile[])((MultipartFile[])object); HashMap data = new HashMap(files.length, 1.0F); data.put(files[0].getName(),Arrays.asList(files)); super.encode(data, MAP_STRING_WILDCARD, template); } else if (bodyType.equals(MultipartFile.class)) { MultipartFile file = (MultipartFile)object; Map<String, Object> data = Collections.singletonMap(file.getName(), object); super.encode(data, MAP_STRING_WILDCARD, template); } else if ((object instanceof Iterable) && ((Iterable) object).iterator().hasNext() && ((Iterable) object).iterator().next() instanceof MultipartFile) { Iterable<?> iterable = (Iterable)object; HashMap data = new HashMap(); Iterator var13 = iterable.iterator(); while(var13.hasNext()) { Object item = var13.next(); MultipartFile file = (MultipartFile)item; data.put(file.getName(), file); } super.encode(data, MAP_STRING_WILDCARD, template); } else { super.encode(object, bodyType, template); } } } }
4.通过Feign调用下载到本地所需的工具类
package net.longjin.comm.utils; import com.alibaba.fastjson.JSON; import feign.Response; import net.longjin.entity.system.Results; import net.longjin.feignClient.FileFeignClient; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.poi.util.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import java.io.*; import java.util.*; @Component public class FileAPIUtils { private static final Logger log = LoggerFactory.getLogger(FileAPIUtils.class); @Value("${file.fileTmpPath}") private String fileTmpPath; @Autowired private FileFeignClient fileFeignClient; /** * 下载文件到本地 * @param fileId * @param token * @return */ public String download(String fileId,String token){ Response response = null; response = fileFeignClient.download(fileId, token); Map<String, Collection<String>> headers = response.headers(); String[] split = headers.get("Content-Disposition").iterator().next().split(";"); String fileName = ""; for(String header:split){ if(header.startsWith("fileName")){ fileName = header.split("=")[1]; try{ fileName = new String(fileName.getBytes("ISO-8859-1")); }catch (Exception e){ e.printStackTrace(); } break; } } String substring = fileName.substring(fileName.lastIndexOf(".")); String newFileName = "" + System.nanoTime()+substring; InputStream inputStream = null; File file = null; try { Response.Body body = response.body(); inputStream = body.asInputStream(); file = new File(fileTmpPath,newFileName); FileOutputStream fileOutputStream = new FileOutputStream(file); byte[] buf = new byte[10240]; while (true) { int len = inputStream.read(buf); if (len < 0) { break; } fileOutputStream.write(buf, 0, len); } inputStream.close(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { if(inputStream != null){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return file.toString(); } /** * 上传文件 * @param makeThumbnail * @param annexType * @param path * @param token * @param tenantId * @return */ public Results uploads(Integer makeThumbnail,String annexType,String path,String token,String tenantId) { File file = new File(path); DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",MediaType.TEXT_PLAIN_VALUE, true, file.getName()); try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) { IOUtils.copy(input, os); input.close(); os.close(); } catch (Exception e) { throw new IllegalArgumentException("Invalid file: " + e, e); } MultipartFile mfile = new CommonsMultipartFile(fileItem); Results upload = fileFeignClient.upload(0, annexType, mfile, token, tenantId); return upload; } }
5.接口调用:
package net.longjin.normalCase.controller; import net.longjin.comm.utils.FileAPIUtils; import net.longjin.entity.system.Results; import net.longjin.feignClient.FileFeignClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; /** * 描述:Test * * @author 何志鹏 * @ClassName:Test * @create 2019-09-23 14:54 * Version 1.0 */ @RestController @RequestMapping("/file") public class Test { @Autowired private FileAPIUtils fileAPIUtils; @Autowired private FileFeignClient fileFeignClient; @Value("${file.fileTmpPath}") private String fileTmpPath; /** * 下载文件到本地 * @return */ @RequestMapping(value = "/uploadDemo") public String upload3(){ String upload = fileAPIUtils.download("0fc2b71624394bd4883b3b654b393a92", "eyJhbGciOiJIUzI1NiJ9.eyJzdGEiOjE1NzA3NzU2MjQ1ODYsImxvZ2luSWQiOiIwNGE3YzQ2NjVjNjU0ZjVlOTdjY2EyYWNlNWIyNTcxNSIsInVzZXJOYW1lIjoi5p2O6L2pIiwidXNlcklkIjoiMTg0YjAwNTkzMzFlNGU1N2IzNjc0ZTg0YzBhNTVlNTAiLCJsb2dpbk5hbWUiOiI4NTIyYmQ0NWY2ZWVhM2MyZTdlYzJiOTJhODRhMWIxYyJ9.649848oKmKdStd5ndXmHhHHRdHAK2SDXtdfhanGcr_Q"); return upload; } /** * 单文件上传 * @param makeThumbnail * @param annexType * @param file * @param token * @param tenantId * @return */ @RequestMapping(value = "/uploadDemo/{annexType}/{makeThumbnail}") public Results upload(@PathVariable Integer makeThumbnail, @PathVariable String annexType, @RequestPart("file") MultipartFile file, @RequestHeader("token") String token, @RequestHeader(value = "tenantId",defaultValue="v1") String tenantId){ System.err.println("========================111111111111111111==========================="); Results upload = fileFeignClient.upload(makeThumbnail, annexType, file, token, tenantId); System.err.println("========================22222222222222222222222222==========================="); System.err.println(upload); return upload; } /** * 多文件上传 * @param makeThumbnail * @param annexType * @param token * @param tenantId * @param files * @return */ @RequestMapping(value = "/uploadDemos/{annexType}/{makeThumbnail}") public Results uploads(@PathVariable Integer makeThumbnail, @PathVariable String annexType, @RequestHeader("token") String token, @RequestHeader(value = "tenantId",defaultValue = "v1") String tenantId, @RequestPart(value = "file") MultipartFile[] files){ System.err.println("========================111111111111111111==========================="); Results results = fileFeignClient.upload2(makeThumbnail, annexType, files, token, tenantId); System.err.println("========================22222222222222222222222222==========================="); System.err.println(results); return results; } }