WebDAVをLinuxのサーバ上で利用しております。
このWebDAVサーバ(Apache)に対して、ファイルを保存したいのですが、
認証を無しの状態では次のような方法で書き込めました。
image->SaveFile("\\\\xxx.no-ip.com\\dav\\test.png",CIMAGE_FORMAT_PNG);
この方法では、認証無しのサーバにVC5.0のEXEファイルから
書き込みを行う事ができました。ですが、IDとパスワードで認証している場合には
そのままでは書き込めないと思います。
認証部分を通過して書き込むにはどのようにしたらよいのでしょう。
(上のサンプルはJpeglibで入手したPNG読み書きプログラムを
使用しております。)
SaveFileメソッド内部では次のような処理が入っておりました。
FILE *fp;
fp = fopen((const char *)filename, "wb");
WebDAVで書き込む場合に本来望ましい書き込み方などのお知恵を
拝借させていただけませんか
ひとつ質問が。
WebDAVって確かHTTPの拡張プロトコルでファイルを取り扱ってたよね?
どうやってデバイス(\\xxx.no-ip.com)にマウントしてるの?
家の子のフォルダ表示はURL(https://url.dom:port/dav)になってるし...???
ちなみにBAISC認証だろうから(http(s)://ユーザー名:パスワード@接続URL)で認証ダイアログを表示せずにログインできるに。
だから本当に\\URL\PATHで開けるならば、\\USER:PASSWD@URL\PATHで挑戦してみる価値はあるかも。
ただし、きちんと実装するならばHTTPなりWebDAVのプロトコルを書くのが正しいんでしょうな。
ちょっと実験してみま。
返信ありがとうございます。
計3箇所でテストを行ってみました。
1.IDにメールアドレスを入れるタイプ(Linux Apacheサーバ)
2.PASSを無しで書き込めるタイプ(Linux Apacheサーバ)
3.普通のID/PASSを要求するタイプ(WindowsIISサーバ)
このうち、3番は外部からネットワークプレースの追加でも入れなかったの
で実験になりませんでした。
2番は前と変わりません。
1番は
image->SaveFile("\\\\xxx@xxx.com:pass@\\xxx.no-ip.com\\shared\\xxx\\test.png",CIMAGE_FORMAT_PNG);
などと指定してみましたが、@マークが二回出てくるためか、だめでした。
きちんと実装する方法を、もう少し考えていこうと思っております。
どうもありがとうございました。
マウントについてですが、LAN内という理由なのかどうかよく分かりませんが、XPマシンからはfopenするだけで書き込めるようです。
(認証無しです)
詳しくは判りません(汗
申し訳ないです。
URL中の@はエスケープしなければいけませんから,それに倣って
> \\\\xxx@xxx.com:pass@\\xxx.no-ip.com\\shared\\xxx\\test.png
\\\\xxx%40xxx.com:pass@xxx.no-ip.com\\shared\\xxx\\test.png
としてみてはどうでしょう。
ただ,httpのURLとして
http://user:pass@host:port/path
というのは本来不正ですから,受け付けない可能性は十分にありますが……。
> というのは本来不正
あれ?そうだっけ?
RFC2617で見かけた記憶があるけれど...英語苦手だから読み間違ったかな?
まぁ、一部(Mozillaだったけ?)で認識されない噂は聞いたことがあるけれど。
どちらにしろ、ブラウザが処理する内容だろうからIEは多分いけると思うに。
しかし、そう考えるとすごい経路だね〜。認証が入るし。
実験してるけど、うまく開けず。みゅい〜
認証とSSLが絡んでるでるか、さらに???になってら(笑。
そうそう、どんなプランを企ててるのか知んないけど、WebDAV自体が向いてないんじゃない?
今のところ、次のような事を企てております。
相手先の画面をWebDAVサーバ上にアップロードする事を考えております。
この目的は、パソコン何でも相談室というチャット上で、相手先から
わざわざ問題画面をアップロードしてもらう手間を省こうと考えております。
困っている方が色々いますが、デスクトップの画像をどこかのWEBページとし
てアップロードしてもらわないと、どんな問題が発生しているのかわからな
いということにあります。
面倒な処理はEXEプログラムを実行してくれるだけで、
1.どのような事を行おうとしているのか表示する(デスクトップ画像を
アップロードしますが構いませんか?等の確認)
2.実際に困っている人のデスクトップをキャップチャする
3.簡易画面で確認する
4.アップロードする
というプロセスをしてくれるものです。
CHAT上にEXEファイルのリンクを張るだけで、簡単にアップロードできる
というのがメリットだと考えております。(必要な状況は決して多いとは
いえませんが)
リモートデスクトップを介して操作させてもらうのがもっとも望ましいの
ですが、3389ポートを空けてもらうか、UPnPに対応しているルータを
持っている必要が出てきます。そのようなわずらわしい処理無しで、
画像を確認できるようなものを作ろうと考えております。
(あまり詳しく確認しておりませんが、WebDAVならば80ポートのみで
すむと思っております:間違ってたらごめんなさい)
FTPアップロードも考えましたが、20ポート21ポートを要求すると
思われます。パッシブモードに設定してないと送信できない事も考えられ
ます。
…と、面倒な手抜きを塗り固めると(←おいおい)、一瞬フリーズする
WebDAVが便利に思えてきます。そういった経緯で考えております。
もし、WebDAV以外でアップロードに向いている手法があったらば、是非とも
ご教授いただけませんか?またはアドバイスなど頂けませんでしょうか。
何卒よろしくお願いいたします。
どうしてもHTTP系に拘るなら、ソケット使ってHTTPのPOST実装かと。
ようは、画像をbase64符号化してHTTPのヘッダくっ付けて送りゃいいわけだ。
WebDAVでもCGIでも受け取れそう。
面倒なら自前プロトコルで通信とか。こっちの方が明らかに簡単そう(w。
初心者やご老人相手なら、リモート制御の必要も出てくるだろうから、自前プロトコルでの通信をお勧めしま。
ISPによるけど、port80の使用をHTTP以外のプロトコルを許可してない所もあるらしいからHTTPトンネル形式で。
とはいえ、対象者が固く閉じられた会社内の人間ではなさそうなので、そこまでの実装も要らないのでは?
大抵のISPはウィルス関係のport以外は開けてそうなので、気にする事の程でもなさそうな。
WebDAVはHTTPの拡張で、ブラウザ上でのホームページの更新とか双方向のファイル交換を目的にしてるっぽいから、この場合は良い選択とは言えなさげ。
FTP系列はデカファイルの交換だからさらに不適用。
画像をUPする程度なら、画像掲示板立ち上げてショット画像をブラウザに引き渡してUPが簡単でいいかも。
>画像掲示板立ち上げてショット画像をブラウザに引き渡してUPが簡単でいいかも
はい。わかりました。
画像掲示板も考えましたが、アップロードが少し厄介かなと考えておりました。
返答いただきまして、ありがとうございました。