Me preguntaba ¿hay alguna manera de poder descargar solo una parte de un archivo .rar o .zip sin descargar todo el archivo? Hay un archivo zip que contiene los archivos A, B, C y D. Solo necesito A. ¿Puedo de alguna manera modificar la descarga para descargar solo A o extraer el archivo en el servidor y obtener A solo?¿Es posible descargar solo parte de un archivo ZIP (por ejemplo, un archivo)?
Respuesta
En cierto modo, sí, puede.
ZIP file format dice que hay un "directorio central". Básicamente, esta es una tabla que almacena qué archivos están en el archivo y qué compensaciones tienen.
Por lo tanto, usando Content-Range puede descargar parte del archivo del final (el directorio central es lo último en el archivo zip) y tratar de identificar el directorio central en el mismo. Si tiene éxito, entonces conoce la lista de archivos y las compensaciones, por lo que puede continuar y obtener esos fragmentos por separado y descomprimirlos usted mismo.
Este enfoque es bastante propenso a errores y no se garantiza que funcione. Pero también lo es el pirateo en general :-)
Otro posible enfoque sería crear un servidor personalizado para eso (ver @pst's answer para más detalles).
Me pregunto si hay una biblioteca que pueda mapear las solicitudes de rango de contenido HTTP como un tipo de flujo perverso IO ... :) (En realidad, sería posible [fsvo], como se describe, para varios idiomas que aceptan entradas de flujo . No es algo que quisiera tocar.) –
Esto no es piratería sino la forma de hacer la tarea bien. En realidad, HTTP aquí se convierte en solo una forma de acceder a la secuencia ZIP, y cualquier componente ZIP que funcione con secuencias se puede utilizar para extraer solo un archivo de la transmisión remota. –
@ EugeneMayevski'EldoSCorp Sí, probablemente tienes razón, no lo vi de esta manera :-) –
Creo que la idea de Sergei Tulentsevs es brillante.
Sin embargo, si hay control sobre el servidor, p. se puede implementar un código personalizado, entonces es una operación bastante trivial (en el esquema de cosas :) mapear/manejar una solicitud, extraer la parte relevante del archivo ZIP, y enviar los datos de vuelta en la secuencia HTTP.
La solicitud podría ser:
http://foo.bar/myfile.zip_a.jpeg
Lo que significaría extracto - y regresar - "a.jpeg" de "myfile.zip".
(I eligió intencionadamente este formato tonto para que los navegadores es probable elegir "myfile.zip_a.jpeg" como nombre en el diálogo de descarga cuando aparece.)
Por supuesto, cómo se implementa esto depende en el servidor/idioma/marco y es posible que ya existan soluciones existentes que admitan una operación similar (pero no lo sé).
Happy coding.
Agradable expansión de mi idea de servidor personalizado. Gracias :-) –
@SergeiTulentsev Tengo la tentación de escribir un cliente como el que describiste :) –
tienes mucho tiempo libre, ¿eh? :-) Pero sí, estoy tentado también :-) –
En su lugar, utilice el lector de Google Docs. Vaya a este enlace: https://docs.google.com/viewer?url=http://file.zip y cambie la dirección del archivo comprimido. Puede abrir archivos zip y rar
¡Qué truco! Fácil y eficiente Para archivar con url que contiene parámetros, no olvide urlencode them. –
Parece que ya no funciona ... [Ejemplo] (https://docs.google.com/viewer?url=http://www.colorado.edu/conflict/peace/download/peace.zip) – boramalper
Si bien esto podría ser una pista valiosa para resolver el problema, una buena respuesta también demuestra la solución. Por favor [edite] para proporcionar un código de ejemplo para mostrar lo que quiere decir. Alternativamente, considere escribir esto como un comentario en su lugar. –
Puede usar FDM, es compatible con la descarga parcial de archivos Zip: Free Download Manager le permite descargar solo la parte necesaria de un archivo comprimido.
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la opinión] (/ review/low-quality-posts/18749488) – aerokite
Es una herramienta, no un código o marco. Este sitio no se trata de buscar programas, se trata de crearlos. – kelin
El truco es hacer lo que sugiere Sergio sin hacerlo manualmente. Esto es fácil si monta el archivo zip a través de un sistema de archivos virtual respaldado por HTTP y luego usa el comando descomprimir estándar en él. De esta forma, las llamadas de E/S de la utilidad de descompresión se traducen al alcance HTTP, lo que significa que solo los fragmentos del archivo zip que desea se transfieren a través de la red.
Aquí hay un ejemplo para Linux que usa HTTPFS, un sistema de archivos virtual muy liviano (usa FUSE). Hay herramientas similares para Windows.
Obtener/construir httpfs:
$ wget http://sourceforge.net/projects/httpfs/files/httpfs/1.06.07.02
$ tar -xjf httpfs_1.06.07.10.tar.bz2
$ rm httpfs
$ ./make_httpfs
monte un archivo zip remoto y extraer un archivo de él:
$ mkdir mount_pt
$ sudo ./httpfs http://server.com/zipfile.zip mount_pt
$ sudo ls mount_pt
zipfile.zip
$ sudo unzip -p mount_pt/zipfile.zip the_file_I_want.txt > the_file_I_want.txt
$ sudo umount mount_pt
Por supuesto también se puede utilizar cualquier otras herramientas al lado de la Línea de comando uno. (Necesito sudo porque parece que FUSE está configurado de esa manera en mi máquina, no debería tener que necesitarlo)
Soy consciente de que esta es una vieja pregunta, esto es para otros que tengan este problema .
Existen varias maneras para que una persona normal pueda descargar un archivo individual desde un archivo ZIP comprimido, desafortunadamente no son de conocimiento común. Hay algunas herramientas de código abierto y servicios web en línea, incluyendo:
- de Windows: (! Que he utilizado desde hace más de 10 años) Iczelion's HTTP Zip Dowloader (open-source)
- Linux: partial-zip (open-source)
- línea: wobzip.org (closed-source)
Me pregunto, si zip parcial funcionó para usted. Para mí, parece una buena promesa, que no me entregó nada. –
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ reseña/mensajes de baja calidad/18749491) – blue112
¿Puede organizar que su archivo aparezca en la parte posterior del código postal?
Descargar 100k:
$ curl -r -100000 https://www.keepassx.org/releases/2.0.2/KeePassX-2.0.2.zip -o tail.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 97k 100 97k 0 0 84739 0 0:00:01 0:00:01 --:--:-- 84817
comprobar qué archivos nos hicieron llegar:
$ unzip -t tail.zip
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
error [tail.zip]: attempt to seek before beginning of zipfile
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
error [tail.zip]: attempt to seek before beginning of zipfile
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
error [tail.zip]: attempt to seek before beginning of zipfile
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
error [tail.zip]: attempt to seek before beginning of zipfile
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
testing: KeePassX-2.0.2/share/translations/keepassx_uk.qm OK
testing: KeePassX-2.0.2/share/translations/keepassx_zh_CN.qm OK
testing: KeePassX-2.0.2/share/translations/keepassx_zh_TW.qm OK
testing: KeePassX-2.0.2/zlib1.dll OK
At least one error was detected in tail.zip.
A continuación, extraer el último archivo:
$ unzip tail.zip KeePassX-2.0.2/zlib1.dll
Archive: tail.zip
error [tail.zip]: missing 7751495 bytes in zipfile
(attempting to process anyway)
inflating: KeePassX-2.0.2/zlib1.dll
- 1. Python: Cómo descargar un archivo zip
- 2. ¿descargar archivo zip usando java?
- 3. jQuery descargar un archivo zip desde un botón?
- 4. ¿Cómo puedo extraer un solo archivo de un archivo ZIP utilizando Perl's Archive :: Zip?
- 5. ¿Es posible descargar un archivo con HTTP POST?
- 6. ¿Es posible definir múltiples clases en un solo archivo .cpp?
- 7. Descargar y extraer archivo Zip en Android
- 8. Lea un archivo zip dentro del archivo zip
- 9. ¿Cómo encriptar un archivo .zip?
- 10. python: ejemplo simple para un huevo python con un archivo fuente de un solo archivo?
- 11. ¿Es posible soltar un solo archivo de git stash?
- 12. Cómo actualizar un archivo en un archivo zip
- 13. Usando System.IO.Packaging para generar un archivo ZIP
- 14. cómo descargar un solo archivo con varios subprocesos en C#
- 15. Modificar un solo archivo de texto en un archivo ZIP, en PHP
- 16. ¿Es posible ejecutar stylecop en un solo archivo en VS2010?
- 17. Actualizar solo parte de un archivo binario con C++
- 18. ¿Cómo puedo modificar un archivo zip solo en la memoria?
- 19. Descargar un archivo con VBS
- 20. Leyendo un archivo zip dentro de un archivo jar
- 21. Crear un archivo ZIP con Maven
- 22. leer parte de un archivo con iostreams
- 23. ¿Cómo extraer un solo archivo de un archivo de almacenamiento remoto?
- 24. ¿Cuál es una buena manera de probar un archivo para ver si es un archivo zip?
- 25. ¿Agregar archivos a un archivo ZIP?
- 26. ¿El archivo de plantilla de Visual Studio es solo un archivo .zip normal o es algo más?
- 27. Descargar un archivo usando Javascript
- 28. Descargar un archivo en D
- 29. PowerShell: ¿es posible determinar el tipo MIME de un archivo?
- 30. ¿Es posible descargar un controlador de kernel sin un reinicio?
Por qué lo llaman una traición? – Nonym
A pesar del título tonto, creo que es una buena pregunta. Si es posible". Sin embargo, la cantidad de trabajo requerido no es trivial ... para el usuario final no es "factible" (a menos que alguien ya haya creado dicha herramienta). –
(Debido a que no existe una etiqueta de lenguaje de programación, imagino que no existe el deseo de codificar una solución como esta :-) –