質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2579閲覧

サーバー内の画像をHTMLで表示するにはどうすればいいでしょうか

mmss

総合スコア46

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/10/02 10:53

編集2017/10/02 13:20

質問失礼いたします。

サーバー内にある画像をHTMLで表示したく、以下のようなプログラムを作成したのですが、上手くいかず困っております。

python

1#!/usr/bin/env python 2# -*- coding:utf-8 -*- 3import cgi 4import cgitb 5import os, sys 6cgitb.enable() 7 8f = open("hosi.jpg","rb") 9 10# print("Content-Type: text/html") 11print("Content-Type: image/jpeg") 12print("") 13print("<html><body>") 14print(f.read()) 15print("</body><html>")

画像を表示したいので"Content-type"を"image/jpeg"にすべきだとは思ったのですが、そのようにすると画面が真っ黒になってしまいます。また、"Content-type"を"text/html"にすると、画像は表示されず英数字が長々と表示されます。

ご助力いただけますと幸いでございます。
何卒よろしくお願いいたします。


割愛させていただいていた部分のCODEも表示させていただきました。

python

1#!/usr/bin/env python 2# -*- coding:utf-8 -*- 3import cgi 4import cgitb 5import os, sys 6cgitb.enable() 7 8try: 9 import msvcrt 10 msvcrt.setmode(0, os.O_BINARY) 11 msvcrt.setmode(1, os.O_BINARY) 12except ImportError: 13 pass 14 15result = 'DUMMY' 16form = cgi.FieldStorage() 17#if form.has_key('file'): 18if 'file' in form: 19 item = form['file'] 20 if item.file: 21# fout = file(os.path.join('/tmp', item.filename), 'wb') 22 fout = open(os.path.join('C:\server\cgi-bin\write', item.filename), 'wb') 23 while True: 24 chunk = item.file.read(1000000) 25 if not chunk: 26 break 27 28 fout.write(chunk) 29 fout.close() 30 result = 'upload is done' 31 #result = "アップロード" 32 33f = open("hosi.jpg","rb") 34print("Content-Type: text/html") 35# print("Content-Type: image/jpeg") 36print("") 37print("<html><body>") 38print(f.read()) 39print(result) 40print("</body><html>")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scsi

2017/10/02 11:42

質問の表題からだと pythonを使わず、htmlで <html><body><img src='./hosi.jpg'></body><html> を書けばいいだけのような気がしますが、、、
mmss

2017/10/02 11:51 編集

ご助力いただき、大変ありがとうございます。 説明不足で恐縮ですが、実はブラウザからアップロードされた画像をサーバーに保存し、且つブラウザに表示するようなプログラムを作成したく考えております。 ※わかりにくくなると思い、サーバーに保存するCODEの部分は割愛しております
guest

回答1

0

ベストアンサー

HTMLで表示されたいのでしたら、<img>要素を使ってパスだけ送ればいいのではないでしょうか?

python

1#!/usr/bin/env python 2# -*- coding:utf-8 -*- 3import cgi 4import cgitb 5import os, sys 6cgitb.enable() 7 8print("Content-Type: text/html") 9print("") 10print("<html><body>") 11print("<img src='./hosi.jpg'>") 12# ↑ 画像のパスは適切なものに変更してください。絶対パスの方が簡単かも。。 13print("</body><html>")

投稿2017/10/02 11:09

namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmss

2017/10/02 11:42

ご助力いただき、大変ありがとうございます。 print("<img src='./hosi.jpg'>")で試してみたところ、以下のエラーが出てしまいました。 OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。 一方でprint("<img src='./hosi.jpg'>")のまま、Content-typeをimage/jpegに変えたところエラーが出なくなった代わりに、画面が真っ暗になってしまいました。 ※コマンドプロンプトには以下のように表示されています。 127.0.0.1 - - [02/Oct/2017 20:35:03] "POST /cgi-bin/open_image.py HTTP/1.1" 200 - 127.0.0.1 - - [02/Oct/2017 20:35:03] command: C:\Anaconda3\python.exe -u C:\server\cgi-bin\open_image.py "" 127.0.0.1 - - [02/Oct/2017 20:35:04] CGI script exited OK <img>で表示するやり方のほうがスマートですのでぜひ利用したいのですが、content-typeがimageではなくても表示できるものなのでしょうか。。
namnium1125

2017/10/02 13:21 編集

う〜ん、、おそらく掲示いただいた場所以外でエラーが生じているように思われます。(`import os`していますけど`os`、質問コード中にはありませんよね?...まぁ、もしかしたら`os`が原因ではないかもしれません...その時はすみません。。) とりあえず`print("<img src='./hosi.jpg'>")`が原因ではないです。`OSError`ですからね。 content-typeはもう`text/html `から変えないでください。確かに`text/html`が原因には関わっていると考えられますが、ここではなく、根本の問題を解決するべきです。 こっちでも少し調べてみます。できれば「関係ない」としたコードの部分(特に`os`を使った部分)も明かせる範囲で明かしていただけるとありがたいです。m(_ _)m
mmss

2017/10/02 13:26

ご返信いただきありがとうございます。 質問を編集させていただき、全CODEを表示させていただきました。 またお時間いただき、大変恐縮です。ご教授いただいた内容のもと、自分でも色々頑張ってみたいと思います!!
namnium1125

2017/10/02 21:46 編集

勘、という程度なんですけど、、`C:\Anaconda3\python.exe -u C:\server\cgi-bin\open_image.py ""`が原因のような気がします。(的外れでしたらすみません。) windowsはファイル名に空白があると`OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。`を吐き出すそうですから、 おそらく`〜\open_image.py`と` ""`が一つのファイル名だと見なされてこんな現象がおきてしまっているような。。 なんで`image/jpeg`だとうまくいくかは不明ですけどね。。(^ ^; 当方はMacなのでどう直せばいいかははっきりは言えないです(試せないので)。すみません。。
mmss

2017/10/03 01:32

ご助力いただきありがとうございます。 空白問題は大丈夫だと思っていましたが、まさかそこに空白があるとは。。 どうしてそこに空白があるのか調べて、直してみたいと思います。
mmss

2017/10/03 03:19

色々試してみたり聞いてみたりしたのですが、print('<img>')のCODEを以下のように書き直したところ上手くいきました!! print('<img src="http://localhost:8000/hosi.jpg" />') とはいえnamnium1125さんのご助力大変ありがたかったです>< どうぞ、また機会がございましたらご助力いただけますと幸いでございます。 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問