164 lines
4.8 KiB
Go
164 lines
4.8 KiB
Go
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)
|
|
}
|