func main() { stdout.Printf("Using '%s' as directory storage.\n", dir) if err := os.MkdirAll(dir, os.FileMode(0775)); err != nil { stderr.Fatalf("Unable to ensure directory exists: %s", err) } var store tusd.DataStore store = filestore.FileStore{ Path: dir, } if storeSize > 0 { store = limitedstore.New(storeSize, store) stdout.Printf("Using %.2fMB as storage size.\n", float64(storeSize)/1024/1024) // We need to ensure that a single upload can fit into the storage size if maxSize > storeSize || maxSize == 0 { maxSize = storeSize } } stdout.Printf("Using %.2fMB as maximum size.\n", float64(maxSize)/1024/1024) handler, err := tusd.NewHandler(tusd.Config{ MaxSize: maxSize, BasePath: "files/", DataStore: store, NotifyCompleteUploads: true, }) if err != nil { stderr.Fatalf("Unable to create handler: %s", err) } address := httpHost + ":" + httpPort stdout.Printf("Using %s as address to listen.\n", address) go func() { for { select { case info := <-handler.CompleteUploads: stdout.Printf("Upload %s (%d bytes) finished\n", info.ID, info.Size) } } }() http.Handle(basepath, http.StripPrefix(basepath, handler)) timeoutDuration := time.Duration(timeout) * time.Millisecond listener, err := NewListener(address, timeoutDuration, timeoutDuration) if err != nil { stderr.Fatalf("Unable to create listener: %s", err) } if err = http.Serve(listener, nil); err != nil { stderr.Fatalf("Unable to serve: %s", err) } }
func ExampleNewStoreComposer() { composer := tusd.NewStoreComposer() fs := filestore.New("./data") fs.UseIn(composer) cl := consullocker.New(nil) cl.UseIn(composer) ls := limitedstore.New(1024*1024*1024, composer.Core, composer.Terminater) ls.UseIn(composer) config := tusd.Config{ StoreComposer: composer, } _, _ = tusd.NewHandler(config) }