2016-05-16 14 views
1

私は現在、非常に基本的なWebサイトにいくつかのSVGイメージをロードしようとしていますが、奇妙な問題にぶつかっています。それが適切であれば、さまざまなパラメトリック式をグラフ化するときにmatplotlibによって作成されたSVGファイルを使って作業しています。私は単純に4枚のランダムSVG画像(これは仕事のすべてと、私はそれらを個別にロードしようとすると罰金ロード)をロードし、小さなWebページにそれらを置くをロードしようとしていますファイル:私の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として置き、{0}などを数字で置き換えてhtmlに直接アクセスしてみました。私は私の絶対的な知恵の終わりに誰かがおそらく私を助けることができれば私は非常に感謝するだろう。これあなたにもまた "にコンテンツを置いてもよいページを生成するために使用されるソースコード

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

あなたが試すことができます一つの簡単な事はあなたがHTML 5を使っているブラウザに指示するにはDOCTYPEを指定されていますボディー 'タグは、その欠如が何かを混乱させている場合に備えています。

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

これで問題が解決しない場合は、「失敗」という意味を明確にしてください。出力はどのように見え、画像を読み込もうとするとdevツールの[ネットワーク]タブには何が表示されますか?あなたのサンプルは、あなたのプログラムの正確な出力のHTMLを完全なコピーですか?そうでない場合は、出力しているものを正確に貼り付けることができますか?

+0

ありがとうございます。 「失敗」とは、すべての4つのデフォルトのサムネイル画像を表示しています:https://imgur.com/cZq2ajh。ネットワークタブ(これまで私が感謝していたことはありませんでした)は、実際に何がうまくいかなかったのか、何かがうまくいかないという情報をほとんど出していませんでした:https://imgur.com/a/BNnTP。それは最初のイメージであり、残りのすべてについて本質的に同じように見えました。再び何がうまくいかないのか分かりません。私は、より多くの情報を得ることができるかどうか試してみるよう要求しましたが、エラーは起こりませんでした。 – williambellwisdo

+0

Paulの回答は以下のとおりです:https://css-tricks.com/snippets/htaccess/serve-svg-correct-content-type/ –

関連する問題