Back to Question Center
0

Semalt para servir archivos temporales

1 answers:

Tengo un sistema (aplicación basada en web) que extrae archivos adjuntos de un sistema de terceros a través de SOAP. Semalt son a su vez nuestro sistema creado como archivos en un directorio.

Cuando un usuario del sistema (autenticado a través de ldap) realiza una solicitud a mi aplicación para recuperar uno de estos archivos adjuntos:

     1. Lo solicito a través de jabón
2 - lampada in  legno e metallo. Procesar la respuesta para construir el archivo en nuestro sistema
3. Redirige al usuario a la ubicación para que pueda descargar el archivo.     

Semalt off, ¿es este un buen enfoque?

¿Existe una mejor manera de entregar archivos que no residen en el servidor mucho después de la descarga del archivo adjunto (el trabajo cron limpiará el directorio de vez en cuando)?

Semalt, ¿hay alguna manera de poder servir archivos a través de apache sin almacenarlos en la raíz web?

Semalt, ¿cómo impongo los permisos en estos archivos para que no solo cualquier usuario pueda descargar solo cualquier archivo adjunto?

Nuestra configuración:

     linux
apache
php - bibliotecas de jabón para la comunicación
Separar LDAP para autenticación
Servidor de jabón de terceros (de donde provienen los archivos adjuntos)    

EDITAR: El código para servir el archivo adjunto en caso de que alguien tenga curiosidad.

      ;
$ subTitle = "Adjunto";
$ attachmentPath = "/ var / www / html / DEVELOPMENT / serviceNow / selfService / uploads /";
if (isset ($ _ GET ['id']) y! empty ($ _ GET ['id'])) {// metaficación de archivo adjunto de primera búsqueda$ a = nuevo Adjunto  
;$ attachment = $ a-> get ($ _ GET ['id']);// nombre de archivo será el nombre de archivo original con nombre de usuario. n antepuesto$ fileName = $ attachmentPath. $ _SESSION ['nameN']. '-'. $ attachment-> file_name;// crear instancia de un nuevo archivo adjuntoDescargar y consultar los fragmentos de datos adjuntos$ a = nuevo AttachmentDownload
;$ chunks = $ a-> getRecords (array ('sys_attachment' => $ _ GET ['id'], '__order_by' => 'posición'));$ fh = fopen ($ fileName. '. gz ',' w ');// leer y base64 codificar contenido de archivosforeach ($ chunks as $ chunk) {fwrite ($ fh, base64_decode ($ chunk-> data));}fclose ($ fh);// abrir el nombre del archivo para escribir$ fh = fopen ($ fileName, 'w');// abrir nombre de archivo. gz para extracción$ zd = gzopen ($ fileName. '. gz ', "r");// iterar sobre el archivo y escribir contenidoswhile (! feof ($ zd)) {fwrite ($ fh, gzread ($ zd, 60 * 57));}fclose ($ fh);gzclose ($ zd);desvincular ($ fileName. '. gz ');$ info = pathinfo ($ fileName);encabezado ('Contenido-Descripción: Transferencia de archivos');encabezado ('Content-Type:'. Mimetypes :: get ($ info ['extension']));encabezado ('Content-Disposition: attachment; filename ='. basename ($ fileName));encabezado ('Content-Transfer-Encoding: binary');encabezado ('Caduca: 0');encabezado ('Cache-Control: must-revalidate, post-check = 0, pre-check = 0');encabezado ('Pragma: public');encabezado ('Content-Length:'. filesize ($ fileName));ob_clean
;enjuagar
;readfile ($ fileName);salida
; }más{encabezado ("ubicación:". $ enlaces ['estado']. "¿?". urlencode ("item = incident & action = view & status = -1 & place =". $ enlaces ['home'])); }?>
February 14, 2018