Go file for parsing, if vid ffmpeg to HLS (inprogress)
This commit is contained in:
parent
37044fe071
commit
b793711537
2 changed files with 240 additions and 35 deletions
|
@ -1,37 +1,78 @@
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
<head>
|
||||||
<head>
|
<meta charset="UTF-8" />
|
||||||
<meta charset="UTF-8">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Third Culture Upload</title>
|
<title>Third Culture Upload</title>
|
||||||
<link rel="stylesheet" href="styles/main.css">
|
<link rel="stylesheet" href="styles/main.css" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1><span class="accent">Third Culture</span> Upload</h1>
|
<h1><span class="accent">Third Culture</span> Upload</h1>
|
||||||
<form action="https://up.thirdculture.top" method="POST" enctype="multipart/form-data">
|
<form
|
||||||
|
action="http://localhost:3880"
|
||||||
|
method="POST"
|
||||||
|
enctype="multipart/form-data"
|
||||||
|
>
|
||||||
<label for="fileInput">Choose file:</label>
|
<label for="fileInput">Choose file:</label>
|
||||||
<input type="file" name="file" id="fileInput" required />
|
<input type="file" name="file" id="fileInput" required />
|
||||||
<br><br>
|
<br /><br />
|
||||||
<button type="submit">Upload</button>
|
<button type="submit">Upload</button>
|
||||||
</form>
|
</form>
|
||||||
<p><br></p>
|
<p><br /></p>
|
||||||
<p>Make sure to copy the link in the next page!</p>
|
<p>Make sure to copy the link in the next page!</p>
|
||||||
<p>More info on third culture upload <a href="scripts/info.html">here</a>.</p>
|
<p>
|
||||||
<p><br></p>
|
More info on third culture upload
|
||||||
<svg version="1.1" style="fill:none;width:75px;height:75px;" width="50" height="50" viewBox="0 0 50 50" id="svg3" sodipodi:docname="logo.svg"
|
<a href="scripts/info.html">here</a>.
|
||||||
|
</p>
|
||||||
|
<p><br /></p>
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
style="fill: none; width: 75px; height: 75px"
|
||||||
|
width="50"
|
||||||
|
height="50"
|
||||||
|
viewBox="0 0 50 50"
|
||||||
|
id="svg3"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
<defs id="defs3" />
|
<defs id="defs3" />
|
||||||
<path style="fill:#000000;stroke:#000000;stroke-width:1.51515px;stroke-linecap:round;stroke-linejoin:round"
|
<path
|
||||||
d="m 0.75757498,49.242423 v 0 V 0.75757498 H 49.242425 V 49.242423 Z" id="path1" />
|
style="
|
||||||
<path style="fill:none;stroke:#a4d1ad;stroke-width:1.51515px;stroke-linecap:round;stroke-linejoin:round"
|
fill: #000000;
|
||||||
d="m 20.454546,38.636362 v 0 l 9.090908,-9.090909 m -9.090908,0 v 0 l 9.090908,9.090909" id="path2" />
|
stroke: #000000;
|
||||||
<path style="fill:none;stroke:#aea3f0;stroke-width:4.24243px;stroke-linecap:round;stroke-linejoin:round"
|
stroke-width: 1.51515px;
|
||||||
d="m 6.8181812,40.151514 v 0 L 25,9.8484837 43.181819,40.151514" id="path3" />
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
"
|
||||||
|
d="m 0.75757498,49.242423 v 0 V 0.75757498 H 49.242425 V 49.242423 Z"
|
||||||
|
id="path1"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="
|
||||||
|
fill: none;
|
||||||
|
stroke: #a4d1ad;
|
||||||
|
stroke-width: 1.51515px;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
"
|
||||||
|
d="m 20.454546,38.636362 v 0 l 9.090908,-9.090909 m -9.090908,0 v 0 l 9.090908,9.090909"
|
||||||
|
id="path2"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="
|
||||||
|
fill: none;
|
||||||
|
stroke: #aea3f0;
|
||||||
|
stroke-width: 4.24243px;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
"
|
||||||
|
d="m 6.8181812,40.151514 v 0 L 25,9.8484837 43.181819,40.151514"
|
||||||
|
id="path3"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
164
transfer/tshweb/transfer.go
Normal file
164
transfer/tshweb/transfer.go
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func uploadHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Method == http.MethodPost {
|
||||||
|
err := r.ParseMultipartForm(15 * 1024 * 1024 * 1024) // limit 15 gb
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Unable to parse form", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
file, _, err := r.FormFile("file")
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Unable to retrieve file", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
// Upload the file
|
||||||
|
req, err := http.NewRequest("POST", "http://localhost:3880", file)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Error creating request", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Error uploading to transfer.sh", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// Unique ID to track file for ffmpeg etc
|
||||||
|
responseURL, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Error reading response", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
urlParts := strings.Split(string(responseURL), "/")
|
||||||
|
uniqueID := urlParts[len(urlParts)-1]
|
||||||
|
|
||||||
|
// Convert file to HLS. Work on error catching and flags tomorrow
|
||||||
|
// IF VIDEO=DO THIS. IF NOT CONTINUE!
|
||||||
|
// ALSO CHANGE THE CODE. IF VIDEO, REDIRECT TO S3 BUCKET
|
||||||
|
// CURRENTLY FILE IS STANDARD UPLOAD TO SERVER
|
||||||
|
cmd := exec.Command("ffmpeg")
|
||||||
|
|
||||||
|
// HTML
|
||||||
|
w.Header().Set("Content-Type", "text/html")
|
||||||
|
fmt.Fprint(w, `
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang=en>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Third Culture Upload</title>
|
||||||
|
<link rel="stylesheet" href="styles/main.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Upload Success</h1>
|
||||||
|
<p><strong>Unique ID:</strong> %s</p>
|
||||||
|
<p><a href="%s" target="_blank">%s</a></p>
|
||||||
|
<a href="/">Upload Another</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`, uniqueID, string(responseURL), string(responseURL))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Original GET form
|
||||||
|
w.Header().Set("Content-Type", "text/html")
|
||||||
|
fmt.Fprint(w, `
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Third Culture Upload</title>
|
||||||
|
<link rel="stylesheet" href="styles/main.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1><span class="accent">Third Culture</span> Upload</h1>
|
||||||
|
<form
|
||||||
|
action="http://localhost:3880"
|
||||||
|
method="POST"
|
||||||
|
enctype="multipart/form-data"
|
||||||
|
>
|
||||||
|
<label for="fileInput">Choose file:</label>
|
||||||
|
<input type="file" name="file" id="fileInput" required />
|
||||||
|
<br /><br />
|
||||||
|
<button type="submit">Upload</button>
|
||||||
|
</form>
|
||||||
|
<p><br /></p>
|
||||||
|
<p>Make sure to copy the link in the next page!</p>
|
||||||
|
<p>
|
||||||
|
More info on third culture upload
|
||||||
|
<a href="scripts/info.html">here</a>.
|
||||||
|
</p>
|
||||||
|
<p><br /></p>
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
style="fill: none; width: 75px; height: 75px"
|
||||||
|
width="50"
|
||||||
|
height="50"
|
||||||
|
viewBox="0 0 50 50"
|
||||||
|
id="svg3"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
>
|
||||||
|
<defs id="defs3" />
|
||||||
|
<path
|
||||||
|
style="
|
||||||
|
fill: #000000;
|
||||||
|
stroke: #000000;
|
||||||
|
stroke-width: 1.51515px;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
"
|
||||||
|
d="m 0.75757498,49.242423 v 0 V 0.75757498 H 49.242425 V 49.242423 Z"
|
||||||
|
id="path1"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="
|
||||||
|
fill: none;
|
||||||
|
stroke: #a4d1ad;
|
||||||
|
stroke-width: 1.51515px;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
"
|
||||||
|
d="m 20.454546,38.636362 v 0 l 9.090908,-9.090909 m -9.090908,0 v 0 l 9.090908,9.090909"
|
||||||
|
id="path2"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="
|
||||||
|
fill: none;
|
||||||
|
stroke: #aea3f0;
|
||||||
|
stroke-width: 4.24243px;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
"
|
||||||
|
d="m 6.8181812,40.151514 v 0 L 25,9.8484837 43.181819,40.151514"
|
||||||
|
id="path3"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
func main() {
|
||||||
|
http.HandleFunc("/", uploadHandler)
|
||||||
|
fmt.Println("Server started at localhost")
|
||||||
|
http.ListenAndServe(":3880", nil)
|
||||||
|
}
|
Loading…
Reference in a new issue