SpringBoot的Controller RequestMapping支持配置 当Controller配置为:res,方法配置为:view,可匹配:resviewxxxxx,resviewxxxxxxxxxx等。 使用HttpServletResponse中的OutputStream,Controller中方法返回null。 相关内容 Filter实现文件下载功能、Servlet下载文件及视频流实现的代码案例 Controller类importio。swagger。annotations。Api;importio。swagger。annotations。ApiOperation;importlombok。extern。slf4j。Slf4j;importorg。springframework。stereotype。Controller;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RequestMethod;importjavax。annotation。Resource;importjavax。servlet。http。HttpServletRequest;importjavax。servlet。http。HttpServletResponse;ControllerApi(tags文件下载)RequestMapping(res)Slf4jpublicclassCommunalFileDownloadController{ResourceprivateICommunalFileDownloadServicecommunalFileDownloadService;ApiOperation(显示)RequestMapping(valueview,method{RequestMethod。GET})publicRdirectView(HttpServletRequestrequest,HttpServletResponseresponse){log。debug(directView()start);log。debug(接收参数,param);Rresultnull;try{resultcommunalFileDownloadService。directView(request,response);}catch(Exceptione){e。printStackTrace();resultR。errMsg(e。getMessage());}log。debug(响应内容,resultresult);log。debug(directView()end);returnresult;}ApiOperation(下载)RequestMapping(valuedownload,method{RequestMethod。GET})publicRdirectDownload(HttpServletRequestrequest,HttpServletResponseresponse){log。debug(directDownload()start);log。debug(接收参数,param);Rresultnull;try{resultcommunalFileDownloadService。directDownload(request,response);}catch(Exceptione){e。printStackTrace();resultR。errMsg(e。getMessage());}log。debug(响应内容,resultresult);log。debug(directDownload()end);returnresult;}} Service类importlombok。extern。slf4j。Slf4j;importorg。apache。commons。io。IOUtils;importorg。springframework。stereotype。Service;importjavax。servlet。ServletOutputStream;importjavax。servlet。http。HttpServletRequest;importjavax。servlet。http。HttpServletResponse;importjava。io。File;importjava。io。FileInputStream;importjava。io。InputStream;importjava。net。URLEncoder;Service(communalFileDownloadService)Slf4jpublicclassCommunalFileDownloadServiceImplimplementsICommunalFileDownloadService{OverridepublicRdirectView(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{log。debug(directView()start);文件路径StringserverStoragePathSystemThisServer。getServerStoragePath();StringcurrentUsePrefixresview;Stringurirequest。getRequestURI();uriuri。substring(request。getContextPath()。length(),uri。length());uriuri。substring(currentUsePrefix。length(),uri。length());StringfilePathserverStoragePathuri;设置HTTP头if(uri。endsWith(。jpg)uri。endsWith(。jpeg)){response。setContentType(imagejpeg);}elseif(uri。endsWith(。png)){response。setContentType(imagepng);}elseif(uri。endsWith(。webp)){response。setContentType(imagewebp);}elseif(uri。endsWith(。svg)){response。setContentType(imagesvgxml);}else{response。setContentType(applicationoctetstream);}输出文件ServletOutputStreamoutputresponse。getOutputStream();InputStreaminputStreamnewFileInputStream(filePath);IOUtils。copy(inputStream,output);Theendlog。debug(directView()end);returnnull;}OverridepublicRdirectDownload(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{log。debug(directDownload()start);文件路径StringserverStoragePathSystemThisServer。getServerStoragePath();StringcurrentUsePrefixresdownload;Stringurirequest。getRequestURI();uriuri。substring(request。getContextPath()。length(),uri。length());uriuri。substring(currentUsePrefix。length(),uri。length());StringfilePathserverStoragePathuri;设置HTTP头FiledownloadFilenewFile(filePath);制定下载格式和下载文件大小response。setContentType(applicationoctetstream);StringdownloadNameURLEncoder。encode(downloadFile。getName(),UTF8);response。setHeader(ContentLength,String。valueOf(downloadFile。length()));response。setHeader(ContentDisposition,attachment;filenamedownloadName);输出文件ServletOutputStreamoutputresponse。getOutputStream();InputStreaminputStreamnewFileInputStream(filePath);IOUtils。copy(inputStream,output);Theendlog。debug(directDownload()end);returnnull;}}