WildFly - getting resource from WAR

后端 未结 7 741
既然无缘
既然无缘 2020-12-21 00:13

I am using the following method to get a resource from WAR file in WildFly:

this.getClass().getResource(relativePath)

It works when the app

7条回答
  •  被撕碎了的回忆
    2020-12-21 00:47

    This sample code works for wildfly deployed and tested on openshift. I think it is a wildfly problem I downland wildfly and tried on local I also get the error.

    Check sample project on github

    import org.springframework.web.bind.annotation.RequestMethod;    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URLConnection;
    
    @Controller
    @RequestMapping
    public class FileDownloadController {
    
        private static final Logger logger = LoggerFactory.getLogger(FileDownloadController.class);
    
        private static final String DOC_FILE = "file/ibrahim-karayel.docx";
        private static final String PDF_FILE = "file/ibrahim-karayel.pdf";
    
    
        @RequestMapping(value = "/download/{type}", method = RequestMethod.GET)
        public void downloadFile(HttpServletRequest request, HttpServletResponse response,
                                 @PathVariable("type") String type) throws IOException {
    
            File file = null;
            InputStream inputStream;
            if (type.equalsIgnoreCase("doc")) {
                inputStream = getClass().getClassLoader().getResourceAsStream(DOC_FILE);
                file = new File(Thread.currentThread().getContextClassLoader().getResource(DOC_FILE).getFile());
            } else if (type.equalsIgnoreCase("pdf")) {
                inputStream = getClass().getClassLoader().getResourceAsStream(PDF_FILE);
                file = new File(Thread.currentThread().getContextClassLoader().getResource(PDF_FILE).getFile());
            } else{
                throw new FileNotFoundException();
            }
            if (file == null && file.getName() == null) {
                logger.error("File Not Found -> " + file);
                throw new FileNotFoundException();
            }
    
            String mimeType = URLConnection.guessContentTypeFromName(file.getName());
            if (mimeType == null) {
                System.out.println("mimetype is not detectable, will take default");
                mimeType = "application/octet-stream";
            }
    
            System.out.println("mimetype : " + mimeType);
            response.setContentType(mimeType);
            /* "Content-Disposition : inline" will show viewable types [like images/text/pdf/anything viewable by browser] right on browser
                while others(zip e.g) will be directly downloaded [may provide save as popup, based on your browser setting.]*/
            response.setHeader("Content-Disposition", String.format("inline; filename=\"" + file.getName() + "\""));
    
            /* "Content-Disposition : attachment" will be directly download, may provide save as popup, based on your browser setting*/
            //response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName()));
    
            response.setContentLength(inputStream.available());
            IOUtils.copy(inputStream, response.getOutputStream());
            response.flushBuffer();
            inputStream.close();
        }
    }
    

提交回复
热议问题