Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ダウンロードするファイルを読み取り専用にしたい!

お世話になります。

現在JSP+Javaサーブレットにてファイルのダウンロードページを作成しています。(DL対象はpdf,csvファイル)

ダウンロード自体は正常に行えたのですが、元ファイルには設定されていた読み取り専用ファイル属性がダウンロードされたファイルでは解除されてしまいます。

元のファイル属性を変化させずにダウンロードを実現する、またはダウンロードするファイルに読み取り専用属性を設定する方法は無いでしょうか?

---------------------------------------------------
現在の処理
---------------------------------------------------
// contentTypeを出力
response.setContentType(contentType);
// ファイル名の送信(attachment部分をinlineに変更すればインライン表示)
response.setHeader("Content-disposition", "attachment; filename=\""+ファイル名+"\"");

// ファイル内容の出力
ServletOutputStream out = response.getOutputStream();
        
FileInputStream fin = new FileInputStream((=サーバ上のファイル));

int size;
while((size = fin.read(buffer))!=-1) {
    out.write(buffer,0, size);
}
        
fin.close();
out.close();

13

回答

10599

閲覧

13件の回答

評価

0

クライアントに「ファイル」を送ることはできない。
やってることは、決まりに従ってファイルの「名前」と「中身」を送って、クライアント側で処理してもらっているだけ。

やりたいならWebアプリではなく、専用のアプリを作ることだ。

評価

0

>$さん

ご解答有難うございます。
う〜ん、やはり無理ですか。(^^;)

<A href=***>ファイル</A>
↑上記のようなベタベタな方法など色々試してみたのですが、同様にサーバから取得した時点で属性が解除されてしまいました。

こうなると、Webサーバ(win)の共有フォルダに保存して公開するくらいしか手は無いかな〜。


自分なりにもう少し試行錯誤してみます。

評価

0

> 共有フォルダに保存して公開するくらいしか手は無いかな〜。

結局同じではないかな。
自分のマシンにダウンロードして、読み取り解除できるでしょ。

評価

0

ファイルはテキストファイルじゃなきゃだめですか?
見れるけど書き換えてほしくない、とかだったら、
文字を画像データにして送っちゃえば、
書き換えはできない(めんどくさい)のではないかと。

評価

0

>hah?さん
たしかに自マシンにダウンロードすれば自由に変更できる設定にそれ程意味があるとは思えませんね。(ユーザ側からの要望なので可能か否か検証している段階です。)

>コロさん
csvファイルの方はダウンロードしたあと他システムで使用したいらしく画像データへの変換は駄目っぽい様子です。

Java云々でなく仕様を再検討したほうがよさそうですね(^^;)

評価

0

あにゃ。ダメですか。

書き換えられたくなかったら、そもそもファイルをダウンロードさせないのがいいのか…な…?
例えば、DBに書いてしまうとか。

>他システムで使用
他のシステムが使用できるのが、
「csv形式のファイル」だけに限定されていたら、
ちょっと要件(編集不可)を満たすのは難しそうですね。



評価

0

いや、だからさ、ダウンロード時に読み取り専用にしたとしても、ダウンロード後に読み取り解除されたら同じではない?と考えたら意味の無い質問だと思うが。
エクセルファイルとして、シートに読み取り保護属性を付けてパスワードでロックするとか。
まあ、そうしても、パスワードロック解除のツールもあるし、厳密には無理なんではなかろうか?

個人的には気になる質問の部類ではあるな。

評価

0

どっかで見たと思ったらマルチポストか
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1025485850

まぁ、利用規約にマルチポストはだめよなんて記述は無いけどさ・・・
//yahoo のほうにもカテゴリが違う場合のみマルチポストとしている。
まぁ、いいや。

他システムで使用って時点でエクスポートとインポートとかやってるんだろうね。

そもそもの問題:なぜ読み取り専用にする必要があるのか。
データを書き換えられたくないってのはわかるが手作りで複製とかされた後に書き換えられたら意味が無い。
それこそコロ氏の言ってるようにWeb上で完結させるくらいしか意味が・・・

評価

0

>コロさん

どうやら他システムとはネットワークが繋がっていないらしく、
媒体に保存してやり取りを行うようなのです。

>hah?さん
>十里さん
ご指摘頂きました通り、「読み取り専用」の解除やファイルの複製/変更は十分考えられます。
・・・が、それでも「可能であるならなんとか付けたい。」という考えで質問させていただきました。
ダウンロード後に解除するのも複製されてしまうのも制限するのは不可能というのは認識しておりますが、ダウンロードした時点では「読み取り専用」であってほしいと考えております。
※ダウンロードすると自動的に解除されるのでは無く、ユーザが読み取り専用であったということを認識し、ユーザの意思で解除したということしたいと思っています。

評価

0

>媒体に保存してやり取りを
>「可能であるならなんとか付けたい
だったら、無理です。

一番最初に$様がおっしゃっているように、
「ファイル」をwebで送ることはできませんから。

評価

0

>※ダウンロードすると自動的に解除されるのでは無く、ユーザが読み取り専用であったということを認識し、ユーザの意思で解除したということしたいと思っています。

別に、これは「解除」されている訳じゃないよ。
データそのものは受け渡しされても、
その内容には属性は含まれない、というだけの話。
そして、データの扱い方について、
サーバーからクライアントに注文をつけることは、
いかなる方法を持ってしてもできません。

逆に、送られてきたデータをどのように扱うか、こそが、
ユーザーの意志のみにかかっています。

評価

0

>無理
補則:
サーブレットを直接呼び出すなら無理ってことです。
クライアント側にサーブレットを呼び出して読み取り専用ファイルを作るアプリを置くなら可能です。

評価

0

>コロさん

色々なアイディアを出して頂き、本当に有難うございます。
とりあえずWebを使用する以上、基本的に不可能であるということですね。


>不良社員さん

>別に、これは「解除」されている訳じゃないよ。
>データそのものは受け渡しされても、
>その内容には属性は含まれない、というだけの話。

非常に判りやすい説明でした、有難うございます。
おかげで大分頭がスッキリしました。o(^-^)o

>>ALL
そもそもWebについての基本的な知識が私に足りていなかったのが大きな問題でした。(汗
このたびは本当に勉強になりました。ありがとうございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。