
Compartir archivos fácil y rápido desde la línea de comandos. Este código contiene el servidor con todo lo que necesita para crear su propia instancia.
Transfer.Sh actualmente es compatible con los proveedores S3 (Amazon S3), GDRive (Google Drive), STORJ (STORJ) y el sistema de archivos local (local).
@stefanbenten resulta ser un mantenedor de este repositorio y de la persona que organiza una instalación pública bien conocida del software en el repositorio.
Los dos no están relacionados, y el repositorio no es el lugar para dirigir solicitudes y problemas para cualquiera de la instalación de Pubblic.
No se anunciará o mencionará la instalación pública de terceros del software en el repositorio en el repositorio en sí, por razones de seguridad.
La posición oficial de mí, @aspacca, como mantenedor del repositorio, es que si desea usar el software, debe alojar su propia instalación.
$ 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 La URL utilizada para solicitar la eliminación de un archivo y regresó como encabezado de respuesta.
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.txtVer buenos ejemplos de uso en ejemplos.md
Crear enlace de descarga directa:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/get/1ldau/test.txt
Archivo en línea:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/inline/1ldau/test.txt
| Parámetro | Descripción | Valor | Envidia |
|---|---|---|---|
| oyente | Puerto para usar para HTTP (: 80) | OYENTE | |
| listador de perfil | Puerto para usar para Profiler (: 6060) | Perfil_listener | |
| Fuerza-HTTPS | redirigir a https | FALSO | Force_https |
| tls-listener | puerto para usar para https (: 443) | Tls_listener | |
| tls-listener solo | bandera para habilitar solo el oyente | Tls_listener_only | |
| TLS-CERT-FILE | ruta al certificado TLS | TLS_CERT_FILE | |
| TLS-Private-Key | camino a la tecla privada TLS | TLS_PRIVATE_KEY | |
| http-autor-usuario | Usuario para la autenticación HTTP básica en la carga | Http_auth_user | |
| http-autor-pass | Pase para la autenticación HTTP básica en la carga | Http_auth_pass | |
| http-auth-htpasswd | ruta de archivo htpasswd para la autenticación HTTP básica en la carga | Http_auth_htpasswd | |
| http-auth-ip-whitelist | Lista separada de comas de IP que se permite cargar sin ser desafiado una autenticación HTTP | Http_auth_ip_whitelist | |
| IP-Whitelist | Lista de comas separada de IP que se pueden conectar al servicio | Ip_whitelist | |
| IP-BlackList | Lista de comas separada de IP que no se permiten conectarse al servicio | Ip_blacklist | |
| ritmo de temperatura | Patio a la carpeta temperatura | Temperatura del sistema | TEMP_PATH |
| pata web | ruta a archivos web estáticos (para desarrollo o front -end personalizado) | Web_Path | |
| trayectoria | prefijo de ruta Cuando el servicio se ejecuta detrás de un proxy | Proxy_path | |
| proxy-puerto | puerto del proxy cuando el servicio se ejecuta detrás de un proxy | Proxy_port | |
| contacto por correo electrónico | Contacto por correo electrónico para la parte delantera | Email_contact | |
| llave ga | Key de Google Analytics para la parte delantera | Ga_Key | |
| proveedor | Qué proveedor de almacenamiento usar | (S3, Storj, RDA o local) | |
| llave uservoice | Clave de voz de usuario para la parte delantera | Uservoice_key | |
| AWS-Access-Key | Clave de acceso de AWS | AWS_ACCESS_KEY | |
| AWS-Secret-Key | Clave de acceso de AWS | Aws_secret_key | |
| balde | AWS Bucket | BALDE | |
| S3-endpoint | Punto final S3 personalizado. | S3_endpoint | |
| s3-región | Región del cubo S3 | UE-West-1 | S3_región |
| s3-no-multipart | deshabilita la carga multipart S3 | FALSO | S3_no_multipart |
| estilo s3-style | URL de estilo de ruta de las fuerzas, requeridas para minio. | FALSO | S3_path_style |
| accesorio de storj | Acceso para el proyecto | Storj_access | |
| storj-bucket | Cubo para usar dentro del proyecto | Storj_bucket | |
| basado | Almacenamiento de ruta para el proveedor local/GDRive | Basado | |
| gdrive-client-json-filepath | ruta a OAuth Client JSON Config para proveedor de RDRIVE | Gdrive_client_json_filepath | |
| GDRive-Local-Config-Path | ruta para almacenar la transferencia local.sh configación caché para el proveedor GDRive | Gdrive_local_config_path | |
| GDRive-chunk-tamaño | Tamaño de la fragmentación para la carga RDRIVE en megabytes, debe ser más bajo que la memoria disponible (8 MB) | Gdrive_chunk_size | |
| vamos-criados-anfitriones | Los hosts para usar para los certificados de Cifrypt (coma separados) | Anfitriones | |
| registro | ruta a archivo de registro | REGISTRO | |
| Cors-dominios | Lista separada por comas de dominios para CORS, configurando Cors habilita CORS | Cors_domains | |
| host clamav | Anfitrión de la característica de clamav | Clamav_host | |
| realizar-clamav-prescan | Prescan cada carga a través de la función de clamav (clamav-host debe ser un enchufe unix unix local) | Perform_CLAMAV_PRESCAN | |
| límite de tasas | Solicitud por minuto | Rate_limit | |
| dimensionamiento máximo | tamaño máximo de carga en kilobytes | Max_upload_size | |
| día de purga | número de días después de que las cargas se purguen automáticamente | Purge_days | |
| intervalo de purga | intervalo en horas para ejecutar la purga automática para (no aplicable a S3 y Storj) | Purge_interval | |
| longitud aleatoria | Longitud del token aleatorio para la ruta de carga (duplique el tamaño para la ruta de eliminación) | 6 | Random_token_length |
Si desea usar TLS usando los certificados de Cience Lets, establezca LetS-entrypt-Hosts en su dominio, establezca TLS-Listener en: 443 y habilite Force-HTTPS.
Si desea usar TLS usando sus propios certificados, configure TLS-Listener en: 443, Force-HTTPS, TLS-CERT-File y TLS-Private-Key.
Cambiado a 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.goPara una fácil implementación, hemos creado un contenedor oficial de Docker. Hay dos variantes, que difieren solo por las cuales el usuario ejecuta el proceso.
El predeterminado se ejecutará como root :
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/ El etiquetado con el sufijo -noroot usará 5000 como UID y GID:
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local --basedir /tmp/También puede construir el contenedor usted mismo. Esto le permite elegir qué UID/GID se utilizará, por ejemplo, cuando se use soportes 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 . Para el uso con un cubo AWS S3, solo necesita especificar las siguientes opciones:
--provider s3AWS_ACCESS_KEY )AWS_SECRET_KEY )BUCKET la variable de entorno)S3_REGION )Si especifica la región S3, no necesita establecer la URL del punto final ya que el punto final correcto se usará automáticamente.
Para utilizar un proveedor personalizado de no AWS S3, debe especificar el punto final como se define de su proveedor de nube.
Para usar la red STORJ como proveedor de almacenamiento, debe especificar los siguientes indicadores:
--provider storjDebe crear una subvención de acceso (o copiarla desde la configuración del enlace ascendente) y un cubo en preparación.
Para comenzar, inicie sesión en su cuenta e vaya al menú de subvención de acceso e inicie el asistente en la parte superior derecha.
Ingrese su nombre de subvención de acceso de elección, presione a continuación y restringirlo según sea necesario/preferido. Luego continúa en CLI o dentro del navegador. A continuación, se le pedirá una frase de pases utilizada como clave de cifrado. Asegúrese de guardarlo en un lugar seguro. ¡Sin ella, perderá la capacidad de descifrar sus archivos!
Posteriormente, puede copiar la subvención de acceso y luego comenzar el inicio del punto final transferir.sh. Se recomienda proporcionar tanto la subvención de acceso como el nombre del cubo como variables Env para mejorar la seguridad.
Ejemplo:
export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj
Para el uso con Google Drive, debe especificar las siguientes opciones:
Debe crear una ID de cliente OAuth desde console.cloud.google.com, descargar el archivo y colocarlo en un directorio seguro.
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.imgLas contribuciones son bienvenidas.
Remco Verhoef
Grinfelds de UVIS
Andrea Spacca
Stefan Benten
Código y documentación Copyright 2011-2018 Remco Verhoef. Código y documentación Copyright 2018-2020 Andrea Spacca. Código y documentación Copyright 2020- Andrea Spacca y Stefan Benten.
Código publicado bajo la licencia MIT.