
Partage de fichiers facile et rapide à partir de la ligne de commande. Ce code contient le serveur avec tout ce dont vous avez besoin pour créer votre propre instance.
Transfer.sh prend actuellement en charge les fournisseurs S3 (Amazon S3), GDrive (Google Drive), Storj (Storj) et Système de fichiers local (local).
@StefanBenten se trouve être un responsable de ce référentiel et la personne qui héberge une installation publique bien connue du logiciel dans le repo.
Les deux sont de toute façon sans rapport, et le repo n'est pas le lieu de demande de demandes et de problèmes pour l'une des installations Pubbliques.
Aucune installation publique tierce du logiciel dans le dépôt ne sera annoncée ou mentionnée dans le dépôt lui-même, pour des raisons de sécurité.
La position officielle de moi, @aspacca, en tant que responsable du dépôt, est que si vous souhaitez utiliser le logiciel, vous devez héberger votre propre installation.
$ 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 L'URL a utilisé pour demander la suppression d'un fichier et retourné en en-tête de réponse.
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.txtVoir de bons exemples d'utilisation sur des exemples.md
Créer un lien de téléchargement direct:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/get/1ldau/test.txt
Fichier en ligne:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/inline/1ldau/test.txt
| Paramètre | Description | Valeur | Env |
|---|---|---|---|
| auditeur | port à utiliser pour http (: 80) | AUDITEUR | |
| laveur de profil | port à utiliser pour Profiler (: 6060) | Profil_Listener | |
| force-https | rediriger vers HTTPS | FAUX | Force_https |
| TLS-Listener | port à utiliser pour HTTPS (: 443) | TLS_Listener | |
| TLS-Listener uniquement | Flag pour activer l'écouteur TLS uniquement | TLS_Listener_only | |
| TLS-CERT-FILE | Chemin vers le certificat TLS | TLS_CERT_FILE | |
| TLS-Private-Key | Chemin vers la clé privée TLS | Tls_private_key | |
| http-user-user | Utilisateur pour Auth HTTP Basic sur le téléchargement | Http_auth_user | |
| HTTP-Auth-Pass | Passer pour l'autant HTTP de base en téléchargement | Http_auth_pass | |
| http-uth-htpasswd | Chemin de fichier htpasswd pour l'autant HTTP de base sur le téléchargement | Http_auth_htpasswd | |
| HTTP-AUTH-IP-WHITELIST | La liste des IPS séparées par des virgules autorisée à télécharger sans être contestée | Http_auth_ip_whitelist | |
| IP-Whitelist | Liste des IPS séparées par des virgules autorisée à se connecter au service | Ip_whitelist | |
| IP-Blacklist | Liste des IPs séparées par des virgules non autorisées à se connecter au service | Ip_blacklist | |
| path | dossier de chemin vers la température | température du système | Temp_path |
| cheminée Web | Chemin vers des fichiers Web statiques (pour le développement ou la frontale personnalisée) | Web_path | |
| chemin proxy | PRÉFIX PATH lorsque le service est exécuté derrière un proxy | Proxy_path | |
| port proxy | port du proxy lorsque le service est exécuté derrière un proxy | Proxy_port | |
| contact par e-mail | Contact par e-mail pour l'avant | Email_Contact | |
| Ga-Key | Google Analytics Key pour l'avant | Ga_key | |
| fournisseur | Quel fournisseur de stockage à utiliser | (S3, Storj, GDrive ou local) | |
| clés uservoice | Clé vocale utilisateur pour l'avant | Userservoice_key | |
| AWS-Access-Key | Clé d'accès AWS | Aws_access_key | |
| AWS-Secret-Key | Clé d'accès AWS | Aws_secret_key | |
| seau | seau AWS | SEAU | |
| S3-Endpoint | Point de terminaison S3 personnalisé. | S3_endpoint | |
| s3-région | région du seau S3 | UE-West-1 | S3_region |
| s3-no-multistrat | Désactive le téléchargement de multipARTS S3 | FAUX | S3_NO_MULTIPART |
| style S3-Path | URL de style de chemin de forces, requis pour Minio. | FAUX | S3_path_style |
| storj-accès | Accès pour le projet | Storj_access | |
| Storj-Bucket | Seau à utiliser dans le projet | Storj_bucket | |
| Basedir | Stockage de chemin pour le fournisseur local / gdrive | Basedir | |
| GDrive-Client-Json-Filepath | Chemin vers OAuth Client JSON Config pour le fournisseur GDrive | Gdrive_client_json_filepath | |
| gdrive-local-config path | Chemin pour stocker le transfert local. | Gdrive_local_config_path | |
| gdrive-chunk size | La taille du morceau pour le téléchargement GDrive dans les mégaoctets doit être inférieure à la mémoire disponible (8 Mo) | Gdrive_chunk_size | |
| let-crypt-hôtes | les hôtes à utiliser pour des certificats de crypte (virgule séparés) | Hôtes | |
| enregistrer | Chemin vers le fichier journal | ENREGISTRER | |
| domaines CORS | Liste des domaines séparés par des virgules pour COR, le définir activer CORS | Cors_domains | |
| hôte de clamav | Hôte pour la fonction Clamav | Clamav_host | |
| Perform-Clamav-Prescan | Prescan chaque téléchargement via la fonction Clamav (Clamav-Host doit être une prise Clamd Unix locale) | Perform_clamav_prescan | |
| limite de taux | demander par minute | Rate_limit | |
| taille max-téléchargement | Taille maximale de téléchargement dans les kilo-kilobytes | Max_upload_size | |
| jours de purge | Nombre de jours après la purge des téléchargements | Purge_days | |
| purge-interval | Intervalle en heures pour exécuter la purge automatique (non applicable à S3 et Storj) | Purge_interval | |
| longueur aléatoire | longueur du jeton aléatoire pour le chemin de téléchargement (double la taille du chemin de suppression) | 6 | Random_token_length |
Si vous souhaitez utiliser TLS en utilisant des certificats de crypte, définissez les hôtes de location vers votre domaine, définissez TLS-Listener sur: 443 et activez Force-HTTPS.
Si vous souhaitez utiliser TLS en utilisant vos propres certificats, définissez TLS-Listener sur: 443, Force-HTTPS, TLS-CERT-FILE et TLS-Private-Key.
Chassé à 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.goPour un déploiement facile, nous avons créé un conteneur Docker officiel. Il existe deux variantes, ne différant que par lesquelles l'utilisateur exécute le processus.
Le par défaut s'exécutera comme root :
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/ L'un tagué avec le suffixe -noroot utilisera 5000 comme UID et GID:
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local --basedir /tmp/Vous pouvez également construire le conteneur vous-même. Cela vous permet de choisir quel uid / gid sera utilisé, par exemple lorsque vous utilisez des supports NFS:
# 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 . Pour l'utilisation avec un seau AWS S3, il vous suffit de spécifier les options suivantes:
--provider s3AWS_ACCESS_KEY )AWS_SECRET_KEY )BUCKET variable de l'environnement)S3_REGION )Si vous spécifiez la région S3, vous n'avez pas besoin de définir l'URL du point de terminaison car le point de terminaison correct sera utilisé automatiquement.
Pour utiliser un fournisseur S3 non AWS personnalisé, vous devez spécifier le point de terminaison tel que défini de votre fournisseur de cloud.
Pour utiliser le réseau Storj comme fournisseur de stockage, vous devez spécifier les indicateurs suivants:
--provider storjVous devez créer une subvention d'accès (ou la copier à partir de la configuration de liaison montante) et un seau en préparation.
Pour commencer, connectez-vous à votre compte et accédez au menu Access Grant et démarrez l'assistant en haut à droite.
Entrez votre nom de subvention d'accès de choix, appuyez sur Suivant et limitez-le si nécessaire / préféré. Continuez ensuite en CLI ou dans le navigateur. Ensuite, on vous demande une phrase secrète utilisée comme clé de chiffrement. Assurez-vous de le sauver dans un endroit sûr. Sans cela, vous perdrez la capacité de décrypter vos fichiers!
Ensuite, vous pouvez copier la subvention d'accès, puis démarrer le démarrage du point de terminaison Transfer.sh. Il est recommandé de fournir à la fois la subvention d'accès et le nom du seau en tant que variables Env pour une sécurité améliorée.
Exemple:
export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj
Pour l'utilisation avec Google Drive, vous devez spécifier les options suivantes:
Vous devez créer un ID client OAuth à partir de console.cloud.google.com, télécharger le fichier et placer dans un répertoire sûr.
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.imgLes contributions sont les bienvenues.
Remco Verhoef
Uvis Grinfelds
Andrea Spacca
Stefan Benten
Code et documentation Copyright 2011-2018 Remco Verhoef. Code et documentation Copyright 2018-2020 Andrea Spacca. Code et documentation Copyright 2020- Andrea Spacca et Stefan Benten.
Code publié sous la licence MIT.