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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1556閲覧

Python利用しての<h href= ファイルダウンロード

KaiganBay

総合スコア11

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/12/04 06:48

編集2021/12/04 06:56

お世話になります。
PHPユーザーですがPython 挑戦中のものです。

htmlの<a href ='XXXX.py'>ダウンロード</a>
を利用してPNGファイルをダウンロードすることに挑戦中です。

xxxx.py
#!/usr/local/bin/python3.7

coding:utf-8

#日本語を扱うための設定
import os

fName = 'downLoad.png'
fSize = str(os.path.getsize(fName))
print('Content-Type: application/force-download')
print('Content-Transfer-Encoding: binary')
print('Content-Length: ' + fSize)
print('Content-Disposition: attachment; filename="' + fName + '"')
print('X-Download-Options: noopen');
print("")

f = open(fName, 'rb')
data = f.read()
print(data)
f.close()
と作成しHTMLをブラウザで表示し、ダウンロードをクリックし実行しました。
ダウンロード先のフォルダが表示されファイルをダウンロードできました。

ファイルサイズもアップロード先と同じで 成功 と思いましたが
ファイルを開くと「ファイルがサポートされてないか、破損の可能性があります。」と表示され
ファイルを開くことができませんでした。

何が破損原因なのかわからないので どなたかに教えていただければ ありがたく思います。
お忙しい中申し訳ございませんが よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

タイトルの、「Python利用しての<h href= ファイルダウンロード」を素直に読むと、「(どこかにある)ダウンロード用のサイトに、Pythonでアクセスしてファイルを取得する」という意味になり、ppaulさんはその前提での回答です。

ところが、あなたがやりたいのはそうじゃなくて、「ダウンロード用のサイトをPythonで作りたい」なので、全然関係ない回答になっています。

dataはバイト列ですが、print(data)すると、__str__()で文字列化されて出力されるので、元のバイナリーデータと同じではないです。

Python

1import sys 2~~~ 3print("") 4sys.stdout.flush() 5 6f = open(fName, 'rb') 7data = f.read() 8sys.stdout.buffer.write(data) 9f.close()

とバイナリーデータのまま書く必要があります。

投稿2021/12/04 09:28

otn

総合スコア85901

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

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

KaiganBay

2021/12/04 11:53

otnさま お世話になります。 質問の文言の件ご指摘通りと思います。 前回答者の方には申し訳ないことをしたと思います。 以後、改善できるように努めます。 本題のプログラムの問題点 教えていただいた通りのプログラムを作成してみます。 ありがとうございました。 今後 何かの質問で目に留まることがあれば再度ご指導願います。 本当にありがとうございました。
guest

0

ベストアンサー

そもそも、ダウンロードするコードがどこにもありません。
以下のようなサイトを読んでみることをお勧めします。

PythonでWeb上の画像などのファイルをダウンロード(個別・一括)

[Python] requestsで画像をちゃんと保存する方法

Pythonでスクレイピングして画像を一括ダウンロードするサンプル

投稿2021/12/04 07:33

ppaul

総合スコア24670

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

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

KaiganBay

2021/12/04 07:44

ppaulさま はじめまして。 この度は回答ありがとうございました。 早速、教えていただいたURLよりコードを参考にして作成したいと思います。 PHPと同じような作りでいいか。 と安直に思ったのが失敗の始まりでした。 助かりました。 ありがとうございました。
KaiganBay

2021/12/04 08:52

私の質問の仕方が悪かったと思います。 Webサイトを開いて クリック されたら ダウンロードという考えでした。 HTML側は <a href="download.py">ダウンロード</a> となっています。 質問の仕方が悪くて失礼いたしました。
KaiganBay

2021/12/04 11:50

他の方のご指摘通りだと思います。 質問の文言をもう少し改善できるように努めます。 重ねて失礼いたしました。 そして ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問