2016-05-16 56 views
1

我目前正試圖加載幾個SVG圖像在一個非常基本的網站,但已運行到奇怪的問題。如果它是相關的,我在繪製各種參數化方程時使用matplotlib創建的SVG文件。我想簡單地加載文件加載4個隨機SVG影像(所有的工作和負荷罰款當我嘗試單獨加載它們),並把它們放在一個小的網頁:我的SVG圖像未加載

<html> 
<img src="graphs/{0}.svg"> 
<img src="graphs/{1}.svg"> 
<img src="graphs/{2}.svg"> 
<img src="graphs/{3}.svg"> 
</html> 

({0}通過{3}被實際的文件名替換,例如1070)。出於某種原因,每次都失敗。例如,

<html> 
<img src="graphs/2286.svg"> 
<img src="graphs/7499.svg"> 
<img src="graphs/7444.svg"> 
<img src="graphs/7666.svg"> 
</html> 

即使這些鏈接中的每一個在我單獨訪問時都失效,仍然失敗。我也通過將file:///Users/my_name/math_project/file.html作爲url直接訪問html,並用數字替換{0}等來實現這一點。我在絕對的智慧結束,如果有人能夠幫助我,我會非常感激。這是用來生成頁面的源代碼

import socket 
import threading 
import random 
import os 
import time 
os.chdir("https://stackoverflow.com/users/my_name/math_project") 
file = open("metadata.txt",'r') # file containing svg file names and equations 
svg_data = file.read().split("\n") 
file.close() 
def handle_call(clientsocket,location): # handles a request 
    l = time.time() 
    res = clientsocket.recv(100000) 
    res = res.split(b"\n") 
    request = res[0].split(b" ")[1] 
    if request == b"/favicon.ico": 
    file = open("favicon.ico",'rb') 
    stuff2 = file.read() 
    file.close() 
    clientsocket.send(stuff2) 
    if request == b'/': 
    file = open("file.html",'rb') 
    res = file.read() 
    file.close() 
    res = str(res,'utf-8') 

    res = res.format(*[random.choice(svg_data).split(":")[0] for a in range(4)]) 
    clientsocket.send(bytes(res,'utf-8')) 
    if request.startswith(b"/graphs/"): 
    file = open(place[1:],'rb') 
    stuff = file.read() 
    file.close() 
    clientsocket.send(stuff) 
sock = socket.socket() 
port = random.randint(2000,10000) 
while 1: 
    try: 
    sock.bind(('',port)) 
    break 
    except BaseException: 
    port = random.randint(2000,10000) 
print("Bound to port {0}".format(port)) 
sock.listen(10) 
while 1: 
    threading.Thread(target=handle_call,args=sock.accept(),).start() 

回答

2

查看您的響應標題,Web服務器正在返回具有錯誤Content-Type的SVG文件。

Content-Type: image/svg 

正確的內容(MIME)類型SVG文件是:

Content-Type: image/svg+xml 

修正你的Web服務器。

1

一件簡單的事情,你可以嘗試在指定的doctype告訴您正在使用HTML 5瀏覽器,您不妨也把內容在「身體「標籤,以防萬一缺乏混淆的東西。

<!DOCTYPE html> 
<html> 
    <body> 
    <img... 
    </body> 
</html 

如果這沒有幫助,請您澄清'失敗'是什麼意思?輸出是什麼樣的,開發工具的「網絡」選項卡在嘗試加載圖像時會報告什麼內容?您的示例是否完整地提供了您的程序的確切輸出的副本?如果不是,你能粘貼它輸出的是什麼嗎?

+0

謝謝你的回答。 「失敗」我的意思是顯示所有四個的默認縮略圖:https://imgur.com/cZq2ajh。網絡選項卡(我從來沒有聽說過謝謝!)幾乎沒有提供有關實際發生錯誤的信息,只是出現了一些問題:https://imgur.com/a/BNnTP。這是第一張圖片,其餘部分看起來基本相同。我再也不知道發生了什麼問題 - 我用請求來試試看能否給我更多的信息,但它沒有發現錯誤,並且svg文件傳輸正常。 – williambellwisdo

+0

Paul的迴應如下:https://css-tricks.com/snippets/htaccess/serve-svg-correct-content-type/ –