2015-05-01 3 views
5

Ho installato Gitlab su un server locale per la valutazione, e una caratteristica fondamentale per me sarà far visualizzare i file svg come immagini nel wiki. Ce l'ho a lavorare se trascino un file in l'editor wiki, che produce un URL in questo modo:Gitlab (rails) Il tipo di file MIME "raw" per i file .svg è 'text/plain'. Può essere configurato per l'output come 'image/svg + xml'?

nel wiki mark-down:

![my svg diagram](http://server/my-group/my-project/uploads/90cdd5d76a05957ab7cf8854c55a38b8/my-diagram.svg) 

risultati in pagina html:

<img src="http://server/my-group/my-project/uploads/90cdd5d76a05957ab7cf8854c55a38b8/my-diagram.svg" alt="my svg diagram"> 

e in per ottenere che al lavoro, ho dovuto modificare /opt/gitlab/embedded/service/gitlab-rails/config/initializers/mime_types.rb aggiungere la riga:

Mime::Type.register_alias "image/svg+xml", :svg 

e questo è g riattaccare se voglio trascinare un file svg nel wiki e averlo memorizzato in questa sezione 'uploads' del progetto, MA, quello che voglio veramente è mostrare un'immagine svg dal repository git. (così, per esempio a quando un diagramma svg cambia, non devo cercarlo nel wiki, lo prenderò solo dal ramo principale)

ho trovato che, per esempio, questo è un link a un file repo:

http://server/my-group/my-project/raw/master/docsfolder/my-drawing.svg 

tuttavia, il tipo MIME apears essere text/plain per i file SVG riferimento in questo modo, e le immagini con che come loro src non verrà visualizzato. C'è un modo per renderli image/svg+xml? sembra che il file di configurazione mime_types.rb non influenzi questo output "raw". o c'è un altro modo in cui posso collegarmi al file repo e ottenere il tipo mime specificato?

ho anche provato <object type="image/svg+xml" data="... e <embed type="image/svg+xml" src=" e anche iframe, ma nessuno di questi funziona neanche.

Nota: funziona benissimo per le immagini jpg dal repository, solo immagini non in formato.

risposta

4

Trovato. sembra che il tipo di contenuto sia impostato in codice rubino nel file raw_controller.rb. così ho modifico

/opt/gitlab/embedded/service/gitlab-rails/app/controllers/projects/raw_controller.rb 

cambiamento questo:

def get_blob_type 
    if @blob.text? 
     'text/plain; charset=utf-8' 
    else 
     'application/octet-stream' 
    end 
    end 

a qualcosa di simile:

def get_blob_type 
    extn = File.extname(@blob.name).downcase 
    if @blob.text? 
     if extn == ".svg" 
     'image/svg+xml' 
     else 
     'text/plain; charset=utf-8' 
     end 
    else 
     case extn 
     when ".jpg", ".jpeg" 
      'image/jpeg' 
     when ".gif" 
      'image/gif' 
     when ".png" 
      'image/png' 
     when ".bmp" 
      'image/bmp' 
     when ".tiff" 
      'image/tiff' 
     else 
      'application/octet-stream' 
     end 
    end 
    end 

poi sudo gitlab-ctrl restart

ora nella mia mark-down, se faccio questo:

![my-diagram](http://server/my-group/my-project/raw/master/docsfolder/my-drawing.svg) 

funziona!

Non ho mai usato il rubino prima, quindi forse c'è un modo migliore, ma finora funziona per me.

+0

Ciao Chris, penso che il ragionamento per cui questo non è abilitata è la sicurezza: in SVG è possibile utilizzare Javascript, che ora viene consegnato a nome del suo esempio gitlab, quindi un cattivo ragazzo o una ragazza potrebbe catturare la vostra sessione. –

+0

Questo è interessante, non sapevo che potessi inserire javascript in un file svg! L'ho provato sul sistema che ho usato, modificato come sopra, iniettando l'avviso ' 'prima del tag svg di chiusura nel file, e controllato. Il wiki ha ancora visualizzato l'immagine, e non ha eseguito il javascript. (IE e FF) Forse un tag img non esegue lo script? Ha eseguito lo script se visualizzo il file raw nella sua stessa pagina. – 101chris

+0

finché la notazione immagine markup include il tag '', considera svg come "statico" svg ... se apri il file in modalità raw, probabilmente lo script verrà eseguito (non lo testò) .. ma siccome utilizzo gitlab in un ambiente controllato (pochi utenti noti) accetteremo il problema di sicurezza qui. ottima soluzione. Grazie! – Filipiz

1

La proposta di 101chris funziona bene su 7.x, ma richiede alcune rielaborazioni su gitlab 8.x. Ecco il mio aggiornamento testato su 8.14.4:

/opt/gitlab/embedded/service/gitlab-rails/app/helpers/blob_helper.RB:

def safe_content_type(blob) 
    if blob.text? 
     case File.extname(blob.name).downcase 
     when '.html' 
     'text/html' 
     when '.css' 
     'text/css' 
     when '.xml' 
     'text/xml' 
     when '.js' 
     'application/javascript' 
     else 
     'text/plain; charset=utf-8' 
     end 
    elsif blob.image? 
     blob.content_type 
    else 
     'application/octet-stream' 
    end 
    end 
Problemi correlati