code: func CreateHTTPUpload(req HTTPTransferRequest) (Command, error) {
  	if req.HTTPRequest == nil {
  		return nil, trace.BadParameter("missing parameter HTTPRequest")
  	}
  
  	if req.FileName == "" {
  		return nil, trace.BadParameter("missing file name")
  	}
  
  	if req.RemoteLocation == "" {
  		return nil, trace.BadParameter("missing remote location")
  	}
  
  	contentLength := req.HTTPRequest.Header.Get("Content-Length")
  	fileSize, err := strconv.ParseInt(contentLength, 10, 0)
  	if err != nil {
  		return nil, trace.BadParameter("failed to parse Content-Length header: %q", contentLength)
  	}
  
  	fs := &httpFileSystem{
  		reader:   req.HTTPRequest.Body,
  		fileName: req.FileName,
  		fileSize: fileSize,
  	}
  
  	flags := Flags{
  		// scp treats it as a list of files to upload
  		Target: []string{req.FileName},
  	}
  
  	cfg := Config{
  		Flags:          flags,
  		FileSystem:     fs,
  		User:           req.User,
  		ProgressWriter: req.Progress,
  		RemoteLocation: req.RemoteLocation,
  		AuditLog:       req.AuditLog,
  	}
  
  	cmd, err := CreateUploadCommand(cfg)
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  
  	return cmd, nil
  }
docs: // CreateHTTPUpload creates HTTP download command