//PutImageLayerV1Handler is save image layer file in the server. func PutImageLayerV1Handler(ctx *macaron.Context) (int, []byte) { //TODO: If standalone == true, Dockyard will check HEADER Authorization; if standalone == false, Dockyard will check HEADER TOEKN. imageID := ctx.Params(":image") basePath := setting.DockerV1Storage imagePath := fmt.Sprintf("%s/images/%s", basePath, imageID) layerfile := fmt.Sprintf("%s/images/%s/%s", basePath, imageID, imageID) if !utils.IsDirExist(imagePath) { os.MkdirAll(imagePath, os.ModePerm) } if _, err := os.Stat(layerfile); err == nil { os.Remove(layerfile) } if file, err := os.Create(layerfile); err != nil { log.Errorf("[%s] Create image file error: %s", ctx.Req.RequestURI, err.Error()) result, _ := json.Marshal(map[string]string{"message": "Write Image File Error."}) return http.StatusBadRequest, result } else { io.Copy(file, ctx.Req.Request.Body) } size, _ := utils.GetFileSize(layerfile) image := new(models.DockerImageV1) if err := image.PutLayer(imageID, layerfile, size); err != nil { log.Errorf("[%s] Failed to save image layer data error: %s", ctx.Req.RequestURI, err.Error()) result, _ := json.Marshal(map[string]string{"message": "Put Image Layer Data Error"}) return http.StatusBadRequest, result } result, _ := json.Marshal(map[string]string{}) return http.StatusOK, result }