package Ġcn . har 0 1 d . notebook . controller Ċ Ċ import Ġcn . har 0 1 d . notebook . core . Const Ċ import Ġcn . har 0 1 d . notebook . core . Error Ċ import Ġcn . har 0 1 d . notebook . core . exception . App Forbidden Exception Ċ import Ġcn . har 0 1 d . notebook . core . exception . App NotFoundException Ċ import Ġcn . har 0 1 d . notebook . service . Audit Service Ċ import Ġcn . har 0 1 d . notebook . service . Config Service Ċ import Ġcn . har 0 1 d . notebook . service . Q ini u Service Ċ import Ġcn . har 0 1 d . notebook . service . UserService Ċ import Ġcn . har 0 1 d . notebook . util . Id Utils Ċ import Ġcn . har 0 1 d . notebook . util . copy Ċ import Ġcn . har 0 1 d . notebook . vo . Upload Response Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . util . File Copy Utils Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġorg . springframework . web . multipart . Multipart File Ċ import Ġjava . io . File Ċ import Ġjavax . annotation . Post Construct Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ @ RestController Ċ @ RequestMapping ("/ files ") Ċ class ĠUpload Controller ( ĊĠĠĠ Ġprivate Ġval ĠuserService : ĠUserService , ĊĠĠĠ Ġprivate Ġval Ġaudit Service : ĠAudit Service , ĊĠĠĠ Ġprivate Ġval Ġconfig Service : ĠConfig Service , ĊĠĠĠ Ġprivate Ġval Ġq ini u Service : ĠQ ini u Service , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbase Dir Ġ= Ġ" upload / files " ĊĊĠĠĠ Ġ@ Post Construct ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( base Dir ) ĊĠĠĠĠĠĠĠ Ġfile . mkdir s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ĊĠĠĠ Ġfun Ġupload (@ RequestParam ( value Ġ= Ġ" file ") Ġfile : ĠMultip art File ): ĠUpload Response Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! config Service . get ( Const . ENABLE _ FILE _ UPLOAD , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠApp Forbidden Exception (" æľª å¼ĢåĲ¯ æĸĩä»¶ ä¸Ĭä¼ł åĬŁèĥ½ ", ĠError . UPLOAD _ DISABLED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService . require CurrentUser () ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= ĠId Utils . encode ( user . id !! Ġ+ ĠId Utils . USER _ OFFSET ) ĊĠĠĠĠĠĠĠ Ġval Ġdir Ġ= ĠFile ( base Dir , Ġprefix ) ĊĠĠĠĠĠĠĠ Ġdir . mkdir s () ĊĠĠĠĠĠĠĠ Ġval Ġlocal File Ġ= ĠFile ( dir , Ġfile . original Filename Ġ?: Ġfile . name ) ĊĠĠĠĠĠĠĠ Ġlocal File . createNew File () ĊĠĠĠĠĠĠĠ ĠFile Copy Utils . copy ( file . bytes , Ġlocal File ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse : ĠUpload Response Ġ= Ġif Ġ( config Service . get ( Const . Q INI U _ ENABLED , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ini u Service . upload Image (" files /${ prefix }", Ġlocal File ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpload Response ( local File . name , Ġ"/ files /${ prefix }/ " Ġ+ Ġlocal File . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġaudit Service . audit Upload ( user , Ġresponse . url ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ { prefix }/{ name }") ĊĠĠĠ Ġfun ĠgetFile (@ PathVariable Ġprefix : ĠString , Ġ@ PathVariable Ġname : ĠString , Ġresponse : ĠHttpServletResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("$ base Dir /$ prefix ", Ġname ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠApp NotFoundException (" æĸĩä»¶ ä¸įåŃĺåľ¨ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresponse . contentType Ġ= ĠMediaType . APPLICATION _ OCT ET _ STREAM _ VALUE ĊĠĠĠĠĠĠĠ Ġfile . inputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( it , Ġresponse . output Stream ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ