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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

0回答

3602閲覧

Web(SharePoint2010のライブラリ)からファイルをダウンロードできないときに考えられる原因は何でしょうか?

sumire_cl

総合スコア228

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/07/03 07:37

編集2022/01/12 10:55

前提・実現したいこと

Web(SharePointのライブラリ)に置いてあるファイルをダウンロードする作業があります。
フォルダやファイルの数がとても多いので、いっこずつクリックしてダウンロードして…… ってやってるとキリがないのです。
(WebDAVは無いしこれからあるようになる予定もありません)

なので、フォルダごとにまとめてダウンロードしてくれるようなのをしてくれるようなのを、いろんなサイトを検索して真似したりして書きました。

引数にするテキストファイルはこんな感じです。
1行目:ダウンロード元のフォルダのURL
2行目:ダウンロード先のフォルダのパス
3行目以降にファイル名を列挙します。(ファイルの種類はいろいろです。SharePointの仕様上、最大限に大きくても50MBはありません)

Text

1http://www.sample.jp/site/dept01/DocLib01/folder01/ 2D:\bkup\folder01\ 3file01.txt 4帳票.xlsx 5プレゼン資料20180701.pptx 6001部長からのメール.msg

ダウンロードするためのスクリプトはこれです。

VBScript

1Set objShell = WScript.CreateObject("WScript.Shell") 2Set objXmlHttp = WScript.CreateObject("MSXML2.XmlHttp") 3Set objFso = WScript.CreateObject("Scripting.FileSystemObject") 4 5'ファイル一覧が列挙されてるテキストファイルを読み込んで配列に格納(1行目に置いてある場所のURL) 6Set objFile = objFso.OpenTextFile("filelist.txt") 7Dim aryRet() 8Dim gyosu : gyosu = 0 9Do Until objFile.AtEndOfStream 10 redim Preserve aryRet(gyosu) 11 aryRet(gyosu) = objFile.ReadLine 12 gyosu = gyosu + 1 13Loop 14objFile.Close 15 16'置いてある場所のURLが1行目に書いてある 17cReqPath = aryRet(0) 18 19'3行目以降のファイル名を読んで順にダウンロード 20Dim i 21for i = 2 to gyosu-1 step 1 22 cFileName = aryRet(i) 23 objXmlHttp.Open "GET", cReqPath & cFileName, False 24 objXmlHttp.Send 25 intStatus = objXmlHttp.status 26 If (intStatus <> 200) Then 27 WScript.Echo "FAILED" & vbCrLf & vbCrLf & "HTTP status code is " & intStatus & vbCrLf & cFileName 28 WScript.Quit 29 End If 30 31'ダウンロード先にする場所のネットーワークパスが2行目に書いてある 32 toNWDirectory = aryRet(1) 33 Set objStream = WScript.CreateObject("ADODB.Stream") 34 objStream.Open 35 objStream.Type = 1 36 objStream.Write objXmlHttp.responseBody 37 objStream.SaveToFile toNWDirectory & cFileName, 2 38 objStream.Close 39 Set objStream = Nothing 40next 41 42WScript.Echo "フォルダ" & vbCrLf & toNWDirectory & vbCrLf & "にダウンロードしました。" 43Set objXmlHttp = Nothing 44 45WScript.Quit

発生している問題

ときどき、404エラーでダウンロードできないファイルが出てきます。
ファイル名は合っています。
当該のファイルを手でダウンロード(ファイル名を右クリック→「対象をファイルに保存」)すると正常にダウンロードできます。

なにか共通する問題点
(たとえば、ファイル名の先頭が特定の文字や記号や数字で始まるとか、ファイル名のなかにスペースがあるとか、特定の拡張子とか)
があるのかなーと、大丈夫だったファイルとダメだったファイルを並べて観察しましたが、私には共通点がみつけられませんでした。

ファイルはあるのに404エラーでダウンロードできない場合に
考えられる原因って、どのようなものがあるのでしょうか。やっぱりファイル名とかでしょうか。
そのような場合に原因をみつけるのは、どのような手段があるのでしょうか。

補足情報(FW/ツールのバージョンなど)

使用しているPCのOSはWindows10で、SharePointは2010です。

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

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

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

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

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

sysjojo

2018/07/04 08:08

Webから、というよりはSharePointサーバーから、のような気がします。ダウンロードできているファイルもあるようですし。タイトル変えた方がよかったかも。SharePointの監査ログ等を取ると分かりそうですが、出来たりできなかったりする、のはできないファイルに何かしらの制限がかかっていたり、というのは想像しますね。
sumire_cl

2018/07/05 05:52

ファイルに制限がかかっていたとしたら、そのファイルを手でダウンロードしたら普通にできるというのが説明つかなくて……。ファイルはみんな、一般のユーザが普通にアップロードして、権限も特にさわっていないものです。どこかSharePointじゃない場所のファイルを、このスクリプトでダウンロードしてみてダメなやつが出るかどうか試してみます。
sysjojo

2018/07/05 06:07

手でダウンロードするときって、ID/パスワードをどこかで入れてません?質問のコードは認証してる箇所なさそうに見えますが。
sumire_cl

2018/07/05 06:09

入れてません。認証するところは無いので… なので認証で404っていう線は考えられないです。
sysjojo

2018/07/05 06:33 編集

認証で404は考えられない、と言われているということは対象のファイルにアクセス制限がかかってない、ということは確認済み、ということですかね?ものによっては「だれ」に見せるか決めてる気がするのですが。https://support.office.com/ja-jp/article/sharepoint-server-%E3%81%A7%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%82%84%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E5%85%B1%E6%9C%89%E3%81%97%E3%81%BE%E3%81%99%E3%80%82-5eec8604-e9d7-4f84-bee5-1c7d8e048d8c
sumire_cl

2018/07/05 06:32

そうですそうです!そして https://oku.edu.mie-u.ac.jp/~okumura/php/fakefile.php/ でやってみましたが、これはちゃんとダウンロードできました。ファイル名がめっちゃ化けますがそれはまた別のお話です。なので日本語ファイル名だとダメっていうこともなさっぽい…… 他にも試してダメなやつを見つけます。
sysjojo

2018/07/05 06:38

あ、いや、試してみて確認したということではなく、SharePoint側のログやコンソールでアクセス制限してないことを確認したのですかね?
sysjojo

2018/07/05 06:40

手でするとできる、という点がキャッシュをクリアしたり、別のブラウザを新しくインストールしたりしてもできるのであれば言い切ってもよいと思うのですが、あずかり知らぬところで認証が通ってたりしないかな?というのが気になります。
sumire_cl

2018/11/27 04:18

アクセス制限はしていないです。キャッシュはクリアしてみました。認証のお話ではないっぽいです。特定の文字が入ると失敗率が高くなる、というのはありそうです。(むしろファイル名に記号とかスペースとか機種依存文字とか使うのがどうだという話なんですが、それはもう仕方ないので…)ブラウザはIE11で、これは会社でそれしか使ってはいけないことになっているのです。
sysjojo

2018/11/30 07:26

手でするとできる、と言われているのはリンクをクリックしてファイルをダウンロードしようとしたときに、保存するファイルの名前を付けるダイアログで別の名前を付けたときもできる、と言われていますかね?名前の問題であれば、ファイル名を変えずに保存しようとしたときに、Windowsの制限などで保存できなかったりする気はしますね。ただ、その場合は404ではない気はしますけど。https://faq.cybozu.info/alphascope/cybozu/web/garoon3/Detail.aspx?id=1131この辺怪しいですけどね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問