2011-07-26 8 views
12

Estoy creando un servicio de carga basado en PHP para algunos de nuestros clientes. Estoy usando SWFUpload para poder ver el progreso de un archivo a medida que se carga. Lo tengo bastante desarrollado, pero me estoy encontrando con un último problema antes de que podamos lanzarlo al público.Cargas HTTP con Resource Forks

Muchos (casi todos) nuestros clientes están basados ​​en Mac y cargan conjuntos de archivos que incluyen InDesign Files, Fonts, Illustrator Files, etc. La mayoría de las veces los archivos de imágenes son correctos, pero ocasionalmente (y siempre con Tipo 1 de fuentes) el archivo se dañará porque está perdiendo el tenedor de recursos.

entiendo por qué ocurre esto (pasando de un sistema multi-tenedor de un sistema de un solo tenedor), pero no puedo encontrar ninguna solución elegante. En mi investigación, la mejor respuesta que he encontrado hasta ahora es "haz que el usuario la comprima". Sé que eso funciona, pero no es razonable, en opinión de nuestro cliente, que solicitemos que compriman todos los archivos que van a enviar.

¿Hay alguna solución mejor para mantener esas horquillas de recursos con vida? Por supuesto, preferiría una solución que sea javascript/php directa, pero me conformaría con algo basado en flash o (menos preferiblemente) basado en Java.

Mis únicos requisitos para la nueva solución serían:

  • progreso visualización Carga
  • usuario no tiene que comprimir manualmente archivos

He aquí alguna información sobre mi sistema

  • Ubuntu 10.10 Server que ejecuta una instalación LAMP estándar
  • PHP5
  • SWFUpload (wtv la versión más reciente es)
+1

En la antigüedad, Apple tenía formatos de archivo llamados MacBinary y BinHex y AppleSingle ... estos estaban específicamente codificados para contener todas las bifurcaciones en un archivo ... no sé si hay una opción habilitada en los navegadores actuales. .. los clientes actuales de correo aún tienen soporte para este tipo de cosas – Yahia

+0

verifique lo que sucede con una carga normal (sin swfupload, etc.) - quizás el navegador envíe la bifurcación de recursos como una parte MIME separada en el POST ... – Yahia

Respuesta

6

Cargas manejar archivos. Si el navegador y el sistema operativo subyacente no pueden tratar con las horquillas en este procedimiento (mapear cualquier archivo en el modelo de archivo para carga), entonces está obligado a lo que obtiene de la arquitectura de los sistemas.

Resource fork: El tenedor de recursos es una construcción del sistema operativo Mac OS utilizado para almacenar datos estructurados en un archivo, junto con los datos no estructurados almacenados dentro del tenedor de datos. Una bifurcación de recursos almacena información en una forma específica, como iconos, formas de ventanas, definiciones de menús y sus contenidos, y código de aplicación (código de máquina).

Si es un bloqueador para usted, es posible que haya elegido el campo equivocado para trabajar. Solo digo, si se topa con bordes sistemáticos, no hay mucho que pueda hacer. Incluso si trabaja para diseñadores gráficos y usuarios de Mac.

El swfupload would need a feature to deal with forks. Para eso, flash would need a feature to deal with forks. Para eso the browser would eventually need a feature to deal with forks. Y así.

Al lado de esta cadena, queda otra pregunta: ¿Cómo lidiar con las horquillas? Como la carga solo asigna un archivo a una porción de datos binarios, ¿cómo mapear la horquilla también? Añadirlo? Añadir un archivo adicional?

Por lo tanto, en el nivel técnico esto no parece fácil de resolver.Todos los componentes y sistemas en la cadena de entrada de archivos deben admitir una característica que comúnmente no es compatible.

Así que como no puede ofrecerle algo al usuario que no existe, lo único que puede hacer es hacer que su aplicación sea más fácil de usar o usar. P.ej. al proporcionar las notas correctas en el momento correcto (por ejemplo, cuando un usuario selecciona un archivo de Tipo 1 para cargarlo, para recordarle que también seleccione la horquilla). Comunicarse con el usuario puede ser útil, pero tenga en cuenta que un usuario debe hablar en un idioma que comprenda.

Entonces, si sabe que ciertos tipos de archivos tienen horquillas, solucione el problema con alguien que pueda resolverlo: El usuario. No puedes.

0

No tiene que usar swfupload para supervisar el progreso.

Éstos son algunos archivos que demuestran esto: https://github.com/senica/Booger/tree/master/assets/js/jquery-upload

No está documentado muy bien, pero básicamente se utiliza la función webkitSlice para cargar los archivos en javascript. Puede usar las funciones de devolución de llamada para mostrar el progreso de los archivos.

Esta sería una solución javascript/php.

Cuestiones relacionadas