@@ -329,64 +329,60 @@ func checkChunkAuthorization(path string, header http.Header, cmdName string) (s
329329return user , resp
330330}
331331
332- // GetChunkHandler processes GET Chunk request.
333- func GetChunkHandler (w http.ResponseWriter , r * http.Request ) {
334- log .V (1 ).Infof ("begin proc GetChunkHandler" )
335-
336- p , err := pfsmod .ParseChunkParam (r .URL .RawQuery )
337- if err != nil {
338- writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , response {})
339- return
340- }
341-
342- user , resp := checkChunkAuthorization (p .Path , r .Header , "GetChunk" )
343- if resp .Err != "" {
344- writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , resp )
345- return
346- }
347-
332+ func getChunk (w http.ResponseWriter , r * http.Request , param * pfsmod.ChunkParam ) error {
348333writer := multipart .NewWriter (w )
349334writer .SetBoundary (pfsmod .DefaultMultiPartBoundary )
350335
351- fileName := p .ToURLParam ().Encode ()
336+ fileName := param .ToURLParam ().Encode ()
352337part , err := writer .CreateFormFile ("chunk" , fileName )
353338if err != nil {
354- log .Error (err )
355- writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , response {})
356- return
339+ return err
357340}
358-
359- resp = response {}
341+ defer writer .Close ()
360342
361343fr := pfsmod.FileHandle {}
362- if err := fr .Open (p .Path , os .O_RDONLY , 0 ); err != nil {
363- resp .Err = err .Error ()
364- log .Error (err )
365- writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , resp )
366- return
344+ if err := fr .Open (param .Path , os .O_RDONLY , 0 ); err != nil {
345+ return err
367346}
368347defer fr .Close ()
369348
370- log .Infof ("user:%s download %s\n " , user , p .String ())
371-
372- if err = fr .CopyN (part , p .Offset , p .Size ); err != nil {
349+ err = fr .CopyN (part , param .Offset , param .Size )
350+ if err != nil {
373351if err != io .EOF {
374- resp .Err = err .Error ()
375- log .Error (err )
376- writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , resp )
377- return
352+ return err
378353}
379354
380- resp .Err = pfsmod .StatusFileEOF
381- writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , resp )
355+ return errors .New (pfsmod .StatusFileEOF )
382356}
357+ return nil
358+ }
383359
384- err = writer .Close ()
360+ // GetChunkHandler processes GET Chunk request.
361+ func GetChunkHandler (w http.ResponseWriter , r * http.Request ) {
362+ log .V (1 ).Infof ("begin proc GetChunkHandler" )
363+
364+ p , err := pfsmod .ParseChunkParam (r .URL .RawQuery )
385365if err != nil {
386- log . Error ( err )
366+ writeJSONResponse ( w , r . URL . RawQuery , http . StatusOK , response {} )
387367return
388368}
389369
370+ user , resp := checkChunkAuthorization (p .Path , r .Header , "GetChunk" )
371+ if resp .Err != "" {
372+ writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , resp )
373+ return
374+ }
375+ log .Infof ("user:%s download %s\n " , user , p .String ())
376+
377+ err = getChunk (w , r , p )
378+ if err != nil {
379+ if err .Error () != pfsmod .StatusFileEOF {
380+ log .Errorln ("cmd %s error info:%s" , p .String (), err )
381+ }
382+ resp .Err = err .Error ()
383+ }
384+
385+ writeJSONResponse (w , r .URL .RawQuery , http .StatusOK , resp )
390386log .V (1 ).Info ("end proc GetChunkHandler" )
391387return
392388}
0 commit comments