
Einfache und schnelle Dateifreigabe aus der Befehlszeile. Dieser Code enthält den Server mit allem, was Sie benötigen, um Ihre eigene Instanz zu erstellen.
Transfer.sh unterstützt derzeit die Anbieter von S3 (Amazon S3), DDRIVE (Google Drive), Storj (Storj) und lokalem Dateisystem (lokal).
@Stefanbenten ist zufällig ein Betreuer dieses Repositorys und die Person, die eine bekannte öffentliche Installation der Software im Repo moderiert.
Die beiden sind sowieso nicht miteinander verbunden, und das Repo ist nicht der Ort, an dem Anfragen und Ausgaben für die pubblische Installation geleitet werden können.
Aus Sicherheitsgründen wird keine öffentliche Installation der Software im Repo in der Repo selbst beworben oder erwähnt.
Die offizielle Position von mir @aspacca als Betreuer des Repo ist, dass Sie Ihre eigene Installation hosten sollten, wenn Sie die Software verwenden möchten.
$ curl -v --upload-file ./hello.txt https://transfer.sh/hello.txt$ gpg --armor --symmetric --output - /tmp/hello.txt | curl --upload-file - https://transfer.sh/test.txt$ curl https://transfer.sh/1lDau/test.txt | gpg --decrypt --output /tmp/hello.txt$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal$ curl -X DELETE < X-Url-Delete Response Header URL > $ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H " Max-Downloads: 1 " # Limit the number of downloads$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H " Max-Days: 1 " # Set the number of days before deletion$ curl --upload-file ./hello.txt https://your-transfersh-instance.tld/hello.txt -H " X-Encrypt-Password: test " # Encrypt the content sever side with AES265 using "test" as password$ curl https://your-transfersh-instance.tld/BAYh0/hello.txt -H " X-Decrypt-Password: test " # Decrypt the content sever side with AES265 using "test" as password Die URL anforderte die Löschung einer Datei und kehrte als Antwortheader zurück.
curl -sD - --upload-file ./hello.txt https://transfer.sh/hello.txt | grep -i -E ' transfer.sh|x-url-delete '
x-url-delete: https://transfer.sh/hello.txt/BAYh0/hello.txt/PDw0NHPcqU
https://transfer.sh/hello.txt/BAYh0/hello.txtSiehe Beispiele für gute Nutzung zu Beispielen.md
Direkten Download -Link erstellen:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/get/dau/test.txt
Inline -Datei:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/inline/1ldau/test.txt
| Parameter | Beschreibung | Wert | Env |
|---|---|---|---|
| Hörer | Port für HTTP (: 80) zur Verwendung | HÖRER | |
| Profillistener | Hafen für Profiler (: 6060) | Profil_Listener | |
| Force-Https | Umleiten zu HTTPS | FALSCH | Force_https |
| TLS-Listener | Port, der für HTTPS verwendet wird (: 443) | Tls_listener | |
| Nur TLS-Listener | Flagge, um TLS -Hörer nur zu ermöglichen | Tls_listener_only | |
| TLS-Cert-Datei | Pfad zum TLS -Zertifikat | Tls_cert_file | |
| tls-privat-key | Weg zum privaten Schlüssel TLS | Tls_private_key | |
| http-auth-user | Benutzer für grundlegende HTTP -Authäfen beim Upload | Http_auth_user | |
| Http-auth-Pass | Pass für grundlegende HTTP -Authäfen beim Upload übergeben | Http_auth_pass | |
| http-auth-htpasswd | HTPasswd -Dateipfad für grundlegende HTTP -Authäfen zum Upload | Http_auth_htpasswd | |
| http-auth-ip-Whitelist | Komma -getrennte Liste der IPs, die hochladen dürfen, ohne ein HTTP -Auth zu fordern | Http_auth_ip_whitelist | |
| IP-Whitelist | Komma getrennte Liste der IPs, die eine Verbindung zum Dienst herstellen dürfen | IP_WHITELIST | |
| IP-Blacklist | Komma getrennte Liste von IPs | Ip_blacklist | |
| Temperaturpfad | Pfad zum Temperaturordner | Systemtemperatur | Temp_path |
| Webpfad | Pfad zu statischen Webdateien (für die Entwicklung oder benutzerdefinierte Frontend) | Web_path | |
| Proxy-Path | Pfad Präfix Wenn der Dienst hinter einem Proxy ausgeführt wird | Proxy_Path | |
| Proxy-Port | Port des Stellvertreters, wenn der Dienst hinter einem Proxy ausgeführt wird | Proxy_port | |
| E-Mail-kontakt | E -Mail -Kontakt für das Frontend | E -Mail_Contact | |
| Ga-Key | Google Analytics -Schlüssel für das Frontend | Ga_key | |
| Anbieter | Welcher Speicheranbieter zu verwenden? | (S3, Storj, DDrive oder Lokal) | |
| uservoice-key | Benutzersprachschlüssel für das Frontend | Uservoice_key | |
| AWS-Access-Key | AWS -Zugriffsschlüssel | AWS_ACCESS_KEY | |
| AWS-Sekret-Key | AWS -Zugriffsschlüssel | AWS_SECRET_KEY | |
| Eimer | AWS -Eimer | EIMER | |
| S3-Endpunkt | Benutzerdefinierter S3 -Endpunkt. | S3_endpoint | |
| S3-Region | Region des S3 -Eimers | EU-west-1 | S3_region |
| S3-No-Multipart | Deaktiviert S3 Multipart Upload | FALSCH | S3_no_multipart |
| S3-Path-Stil | Erzwungen URLs im Pfadstil, erforderlich für Minio. | FALSCH | S3_path_style |
| Storj-Access | Zugang für das Projekt | STORJ_ACCESS | |
| Storj-Bucket | Bucket im Projekt verwendet | STORJ_BUCKET | |
| basiert | Pfadspeicher für den lokalen/DDRIVE -Anbieter | Basiert | |
| DDRIVE-Klient-Json-Filepath | Pfad zu OAuth Client JSON -Konfiguration für den GDRIVE -Anbieter | DDRIVE_CLIENS_JSON_FILEPATH | |
| DDRIVE-Lokal-Konfiguration-Pfad | Pfad zum Speichern von lokalem Transfer.sh -ssh -Konfigurations -Cache für den DDRIVE -Anbieter | GDRIVE_LOCAL_CONFIG_PATH | |
| DDRIVE-Chunk-Größe | Chunk -Größe für DDRIVE -Upload in Megabyte muss niedriger sein als der verfügbare Speicher (8 MB) | DDRIVE_CHUNK_SIZE | |
| Lets-crypt-Hosts | Hosts, die für Lets Encrypt -Zertifikate verwendet werden (Komma separiert) | Gastgeber | |
| Protokoll | Pfad zur Protokolldatei | PROTOKOLL | |
| CORS-Domains | Komma getrennte Liste der Domänen für CORs und setzt CORS aktiviert | Cors_domains | |
| Clamav-Host | Host for Clamav -Funktion | Clamav_host | |
| CLAMAV-PRESSET | Prescan Jede Upload durch Clamav-Funktion (Clamav-Host muss ein lokaler Clamd Unix-Sockel sein) | Perform_clamav_prescan | |
| Ratenlimit | Anfrage pro Minute | Rate_limit | |
| Max-Upload-Größe | maximale Uploadgröße in Kilobyten | Max_upload_size | |
| Säubertage | Anzahl der Tage nach dem automatischen Löschen der Uploads | Purge_days | |
| Säuberungsinterval | Intervall in Stunden, um die automatische Säuberung für (nicht anwendbar für S3 und Storj) zu betreiben) | Purge_interval | |
| zufällige Länge | Länge des zufälligen Tokens für den Upload -Pfad (doppelte Größe für den Löschen des Pfades) | 6 | Random_token_length |
Wenn Sie TLS verwenden möchten, können Sie Zertifikate mit LECTTS-Verschlüsselungszertifikaten einstellen, lets-crypt-hosts in Ihre Domain, setzen Sie TLS-Listener auf: 443 und aktivieren Sie Force-HTTPs.
Wenn Sie TLS mit Ihren eigenen Zertifikaten verwenden möchten, setzen Sie TLS-Listener auf: 443, Force-HTTPS, TLS-CERT-Datei und TLS-Private-Key.
Umgeschaltet auf Go111Module
go run main.go --provider=local --listener :8080 --temp-path=/tmp/ --basedir=/tmp/$ git clone [email protected]:dutchcoders/transfer.sh.git
$ cd transfer.sh
$ go build -o transfersh main.goFür die einfache Bereitstellung haben wir einen offiziellen Docker -Container erstellt. Es gibt zwei Varianten, die sich nur unterscheiden, von denen der Benutzer den Prozess ausführt.
Die Standardeinstellung wird als root ausgeführt:
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/ Der mit dem Suffix -noroot markiert wird 5000 als UID und GID:
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local --basedir /tmp/Sie können den Behälter auch selbst bauen. Auf diese Weise können Sie auswählen, welche UID/GID verwendet werden soll, z. B. bei Verwendung von NFS -Reittieren:
# Build arguments:
# * RUNAS: If empty, the container will run as root.
# Set this to anything to enable UID/GID selection.
# * PUID: UID of the process. Needs RUNAS != "". Defaults to 5000.
# * PGID: GID of the process. Needs RUNAS != "". Defaults to 5000.
docker build -t transfer.sh-noroot --build-arg RUNAS=doesntmatter --build-arg PUID=1337 --build-arg PGID=1338 . Für die Verwendung mit einem AWS S3 -Eimer müssen Sie nur die folgenden Optionen angeben:
--provider s3AWS_ACCESS_KEY )AWS_SECRET_KEY )BUCKET )S3_REGION )Wenn Sie die S3-Region angeben, müssen Sie die Endpunkt-URL nicht festlegen, da der richtige Endpunkt automatisch verwendet wird.
Um einen benutzerdefinierten S3-Anbieter für Nicht-AW-S3 zu verwenden, müssen Sie den von Ihrem Cloud-Anbieter definierten Endpunkt festlegen.
Um das Storj -Netzwerk als Speicheranbieter zu verwenden, müssen Sie die folgenden Flags angeben:
--provider storjSie müssen einen Zugriffszuschuss (oder kopieren Sie ihn aus der Uplink -Konfiguration) und einen Eimer zur Vorbereitung kopieren.
Melden Sie sich, um loszulegen, bei Ihrem Konto und gehen Sie zum Access Grant -Menü und starten Sie den Assistenten rechts rechts.
Geben Sie Ihren Zugriffsnamen der Wahl ein, drücken Sie als nächstes und beschränken Sie ihn bei Bedarf/bevorzugt. Danach fahren Sie entweder in CLI oder im Browser fort. Als nächstes werden Sie nach einer Passphrase gefragt, die als Verschlüsselungsschlüssel verwendet wird. Stellen Sie sicher, dass Sie es an einem sicheren Ort speichern. Ohne sie verlieren Sie die Möglichkeit, Ihre Dateien zu entschlüsseln!
Anschließend können Sie den Zugriffszuschuss kopieren und dann das Start des Endpunkts der Transfer.sh -Endpunkt beginnen. Es wird empfohlen, sowohl den Zugriffszuschuss als auch den Bucket -Namen als Env -Variablen für die erweiterte Sicherheit bereitzustellen.
Beispiel:
export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj
Für die Verwendung bei Google Drive müssen Sie die folgenden Optionen angeben:
Sie müssen eine OAuth -Client -ID von console.cloud.google.com erstellen, die Datei herunterladen und in ein sicheres Verzeichnis legen.
go run main.go --provider gdrive --basedir /tmp/ --gdrive-client-json-filepath /[credential_dir] --gdrive-local-config-path [directory_to_save_config]
transfer () (if [ $# -eq 0 ] ; then printf " No arguments specified.nUsage:n transfer <file|directory>n ... | transfer <file_name>n " >&2 ; return 1 ; fi ; file_name= $( basename " $1 " ) ; if [ -t 0 ] ; then file= " $1 " ; if [ ! -e " $file " ] ; then echo " $file : No such file or directory " >&2 ; return 1 ; fi ; if [ -d " $file " ] ; then cd " $file " || return 1 ; file_name= " $file_name .zip " ; set -- zip -r -q - . ; else set -- cat " $file " ; fi ; else set -- cat ; fi ; url= $( " $@ " | curl --silent --show-error --progress-bar --upload-file " - " " https://transfer.sh/ $file_name " ) ; echo " $url " ; ) $ transfer hello.txt
transfer ()
{
local file
declare -a file_array
file_array=( " ${ @ } " )
if [[ " ${file_array[@]} " == " " || " ${1} " == " --help " || " ${1} " == " -h " ]]
then
echo " ${0} - Upload arbitrary files to " transfer.sh " . "
echo " "
echo " Usage: ${0} [options] [<file>]... "
echo " "
echo " OPTIONS: "
echo " -h, --help "
echo " show this message "
echo " "
echo " EXAMPLES: "
echo " Upload a single file from the current working directory: "
echo " ${0} " image.img " "
echo " "
echo " Upload multiple files from the current working directory: "
echo " ${0} " image.img " " image2.img " "
echo " "
echo " Upload a file from a different directory: "
echo " ${0} " /tmp/some_file " "
echo " "
echo " Upload all files from the current working directory. Be aware of the webserver's rate limiting!: "
echo " ${0} * "
echo " "
echo " Upload a single file from the current working directory and filter out the delete token and download link: "
echo " ${0} " image.img " | awk --field-separator= " : " '/Delete token:/ { print $ 2 } /Download link:/ { print $ 2 }' "
echo " "
echo " Show help text from " transfer.sh " : "
echo " curl --request GET " https://transfer.sh " "
return 0
else
for file in " ${file_array[@]} "
do
if [[ ! -f " ${file} " ]]
then
echo -e " e[01;31m' ${file} ' could not be found or is not a file.e[0m " >&2
return 1
fi
done
unset file
fi
local upload_files
local curl_output
local awk_output
du -c -k -L " ${file_array[@]} " >&2
# be compatible with "bash"
if [[ " ${ZSH_NAME} " == " zsh " ]]
then
read $' upload_files? e [01;31mDo you really want to upload the above files ( ' " ${ # file_array[@]} " $' ) to "transfer.sh"? (Y/n): e [0m '
elif [[ " ${BASH} " == * " bash " * ]]
then
read -p $' e [01;31mDo you really want to upload the above files ( ' " ${ # file_array[@]} " $' ) to "transfer.sh"? (Y/n): e [0m ' upload_files
fi
case " ${upload_files :- y} " in
" y " | " Y " )
# for the sake of the progress bar, execute "curl" for each file.
# the parameters "--include" and "--form" will suppress the progress bar.
for file in " ${file_array[@]} "
do
# show delete link and filter out the delete token from the response header after upload.
# it is important to save "curl's" "stdout" via a subshell to a variable or redirect it to another command,
# which just redirects to "stdout" in order to have a sane output afterwards.
# the progress bar is redirected to "stderr" and is only displayed,
# if "stdout" is redirected to something; e.g. ">/dev/null", "tee /dev/null" or "| <some_command>".
# the response header is redirected to "stdout", so redirecting "stdout" to "/dev/null" does not make any sense.
# redirecting "curl's" "stderr" to "stdout" ("2>&1") will suppress the progress bar.
curl_output= $( curl --request PUT --progress-bar --dump-header - --upload-file " ${file} " " https://transfer.sh/ " )
awk_output= $( awk
' gsub("r", "", $0) && tolower($1) ~ /x-url-delete/
{
delete_link=$2;
print "Delete command: curl --request DELETE " """delete_link""";
gsub(".*/", "", delete_link);
delete_token=delete_link;
print "Delete token: " delete_token;
}
END{
print "Download link: " $0;
} ' <<< " ${curl_output} " )
# return the results via "stdout", "awk" does not do this for some reason.
echo -e " ${awk_output} n "
# avoid rate limiting as much as possible; nginx: too many requests.
if (( ${ # file_array[@]} > 4 ))
then
sleep 5
fi
done
;;
" n " | " N " )
return 1
;;
* )
echo -e " e[01;31mWrong input: ' ${upload_files} '.e[0m " >&2
return 1
esac
}$ ls -lh
total 20M
-rw-r--r-- 1 < some_username > < some_username > 10M Apr 4 21:08 image.img
-rw-r--r-- 1 < some_username > < some_username > 10M Apr 4 21:08 image2.img
$ transfer image *
10240K image2.img
10240K image.img
20480K total
Do you really want to upload the above files (2) to " transfer.sh " ? (Y/n):
# ####################################################################################################################################################################################################################################### 100.0%
Delete command: curl --request DELETE " https://transfer.sh/wJw9pz/image2.img/mSctGx7pYCId "
Delete token: mSctGx7pYCId
Download link: https://transfer.sh/wJw9pz/image2.img
# ####################################################################################################################################################################################################################################### 100.0%
Delete command: curl --request DELETE " https://transfer.sh/ljJc5I/image.img/nw7qaoiKUwCU "
Delete token: nw7qaoiKUwCU
Download link: https://transfer.sh/ljJc5I/image.img
$ transfer " image.img " | awk --field-separator= " : " ' /Delete token:/ { print $2 } /Download link:/ { print $2 } '
10240K image.img
10240K total
Do you really want to upload the above files (1) to " transfer.sh " ? (Y/n):
# ####################################################################################################################################################################################################################################### 100.0%
tauN5dE3fWJe
https://transfer.sh/MYkuqn/image.imgBeiträge sind willkommen.
Remco Verhoef
Uvis Grinfels
Andrea Spacca
Stefan Bent
Code und Dokumentation Copyright 2011-2018 Remco Verhoef. Code und Dokumentation Copyright 2018-2020 Andrea Spacca. Code und Dokumentation Copyright 2020- Andrea Spacca und Stefan Bent.
Code, der unter der MIT -Lizenz veröffentlicht wurde.