feat: Make upload path selectable (#39)
continuous-integration/drone/push Build is failing Details

This works for me, but for a more public site, I think I'll also add a boolean attribute named "upload_allowed" and "writable" to Config.Library..

Something to allow you to configure which directories can receive new uploads, and which directories we consider writable for other purposes (like editing meta data in yml, creating new thumbnails, ...)

Co-authored-by: Heinrich Langos <gumbo2000@noreply@mills.io>
Reviewed-on: #39
Co-authored-by: Heinrich 'Henrik' Langos <gumbo2000@noreply@mills.io>
Co-committed-by: Heinrich 'Henrik' Langos <gumbo2000@noreply@mills.io>
Heinrich 'Henrik' Langos 4 months ago committed by James Mills
parent 7a4ef5b6df
commit 0a793f7d3f

@ -236,15 +236,12 @@ func (a *App) uploadHandler(w http.ResponseWriter, r *http.Request) {
title := r.FormValue("video_title")
description := r.FormValue("video_description")
// TODO: Make collection user selectable from drop-down in Form
// XXX: Assume we can put uploaded videos into the first collection (sorted) we find
keys := make([]string, 0, len(a.Library.Paths))
for k := range a.Library.Paths {
keys = append(keys, k)
if _, exists := a.Library.Paths[r.FormValue("target_library_path")]; !exists {
err := fmt.Errorf("uploading to invalid library path: %s", r.FormValue("target_library_path"))
collection := keys[0]
targetLibraryPath := r.FormValue("target_library_path")
uf, err := ioutil.TempFile(
@ -278,7 +275,7 @@ func (a *App) uploadHandler(w http.ResponseWriter, r *http.Request) {
vf := filepath.Join(
fmt.Sprintf("%s.mp4", shortuuid.New()),
thumbFn1 := fmt.Sprintf("%s.jpg", strings.TrimSuffix(tf.Name(), filepath.Ext(tf.Name())))

@ -13,6 +13,7 @@ let file = null
const uploadForm = document.getElementById('upload-form')
const videoInput = document.getElementById('video-input')
const targetLibraryPath = document.getElementById('target-library-path')
const videoTitle = document.getElementById('video-title')
const videoDescription = document.getElementById('video-description')
const uploadMessageLabel = document.getElementById('upload-message')
@ -164,6 +165,7 @@ const startUploading = () => {
const formData = new FormData()
formData.append('video_file', file)
formData.append('target_library_path', targetLibraryPath.value)
formData.append('video_title', videoTitle.value)
formData.append('video_description', videoDescription.value)
const xhr = new XMLHttpRequest()

@ -9,6 +9,11 @@
<span>Click to browse or drop file here</span>
<div class="upload-details">
<select id="target-library-path" name="target-library-path">
{{range $index, $item :=.Config.Library}}
<option value="{{$item.Path}}">{{$item.Path}}</option>
<input id="video-title" type="text" placeholder="Optional title" />
<textarea id="video-description" rows="2" placeholder="Optional description"></textarea>
<div id="upload-file" class="upload-file">