/** Ċ Ġ* ĠCopyright ĠÂ© Ġair back Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< http : ></ http : >// www . gnu . org / licenses />. Ċ Ġ*/ Ċ package Ġcom . air back . module . file . servlet Ċ Ċ import Ġcom . air back . core . utils . Mime Types Util Ċ import Ġcom . air back . module . ec m . service . Resource Service Ċ import Ġcom . air back . servlet . Generic HttpServlet Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . Buffered OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjavax . servlet . Servlet Exception Ċ import Ġjavax . servlet . annotation . Web Servlet Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ /** Ċ Ġ* Ġ@ author Ġair back ĠLtd . Ċ Ġ* Ġ@ since Ġ 4 . 4 . 0 Ċ Ġ*/ Ċ @ Web Servlet ( url Patterns Ġ= Ġ["/ file /* "], Ġname Ġ= Ġ" resource Get Handler ") Ċ class ĠResource Get Handler Ġ: ĠGeneric HttpServlet () Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresource Service : ĠResource Service ĊĊĠĠĠ Ġ@ Throws ( Servlet Exception :: class , ĠIOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġon Handle Request ( request : ĠHttpServletRequest , Ġresponse : ĠHttpServletResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġrequest . path Info ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġresource Service . getContent Stream ( path ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( inputStream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader (" Content - Type ", ĠMime Types Util . detect MimeType ( path )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . setHeader (" Content - Length ", ĠinputStream . available (). toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuffered InputStream ( inputStream ). use Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuffered OutputStream ( response . output Stream ). use Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 8 1 9 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlength Ġ= Ġinput . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( length Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( buffer , Ġ 0 , Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ= Ġinput . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" Can Ġnot Ġfind Ġresource Ġhas Ġpath Ġ$ path ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLoggerFactory . getLogger ( Resource Get Handler :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ