チェンジセット 1639 (default)
- 日時:
- 2024/02/14 3:25:54 (8ヵ月前)
- 場所:
- framework/trunk
- ファイル:
-
- 6個の更新
凡例:
- 未変更
- 追加
- 削除
-
framework/trunk/WebApplication/UI/WebControls/FileUploadPage.aspx
r1637 r1639 25 25 </div> 26 26 <div> 27 <asp:Button runat="server" Text="Button101"/> 27 28 <sff:FileUpload ID="FileUpload101" runat="server" 28 29 OnFileSelected="FileUpload101_OnFileSelected" /> 29 <asp:Button runat="server" Text="Button101"/>30 30 </div> 31 31 … … 78 78 </div> 79 79 80 81 <h2>アップロードファイルキャッシュ</h2> 82 83 <h3>キャッシュ無し</h3> 84 <div> 85 Page.Load<asp:Literal runat="server" ID="Literal3011"/> 86 </div> 87 <div> 88 Button.Click<asp:Literal runat="server" ID="Literal3012"/> 89 </div> 90 <div> 91 FileUpload.FileSelected<asp:Literal runat="server" ID="Literal3013"/> 92 </div> 93 <div> 94 <asp:Button runat="server" ID="Button301" 95 Text="Button301" 96 OnClick="Button301_OnClick"/> 97 <sff:FileUpload ID="FileUpload301" runat="server" 98 Accept="text/plain" 99 CachePostedFile="False" 100 OnFileSelected="FileUpload301_OnFileSelected" /> 101 </div> 102 103 <h3>キャッシュ有り</h3> 104 <div> 105 Page.Load<asp:Literal runat="server" ID="Literal3021"/> 106 </div> 107 <div> 108 Button.Click<asp:Literal runat="server" ID="Literal3022"/> 109 </div> 110 <div> 111 FileUpload.FileSelected<asp:Literal runat="server" ID="Literal3023"/> 112 </div> 113 <div> 114 <asp:Button runat="server" ID="Button302" 115 Text="Button302" 116 OnClick="Button302_OnClick"/> 117 <sff:FileUpload ID="FileUpload302" runat="server" 118 Accept="text/plain" 119 CachePostedFile="True" 120 OnFileSelected="FileUpload302_OnFileSelected" /> 121 </div> 122 123 <h3>キャッシュ有り + leaveOpen</h3> 124 <div> 125 Page.Load<asp:Literal runat="server" ID="Literal3031"/> 126 </div> 127 <div> 128 Button.Click<asp:Literal runat="server" ID="Literal3032"/> 129 </div> 130 <div> 131 FileUpload.FileSelected<asp:Literal runat="server" ID="Literal3033"/> 132 </div> 133 <div> 134 <asp:Button runat="server" ID="Button303" 135 Text="Button303" 136 OnClick="Button303_OnClick"/> 137 <sff:FileUpload ID="FileUpload303" runat="server" 138 Accept="text/plain" 139 CachePostedFile="True" 140 OnFileSelected="FileUpload303_OnFileSelected" /> 141 </div> 142 143 144 <h2>アップロードファイルキャッシュ + AllowMultiple</h2> 145 146 <h3>キャッシュ無し</h3> 147 <div> 148 Page.Load<asp:Literal runat="server" ID="Literal4011"/> 149 </div> 150 <div> 151 Button.Click<asp:Literal runat="server" ID="Literal4012"/> 152 </div> 153 <div> 154 FileUpload.FileSelected<asp:Literal runat="server" ID="Literal4013"/> 155 </div> 156 <div> 157 <asp:Button runat="server" ID="Button401" 158 Text="Button401" 159 OnClick="Button401_OnClick"/> 160 <sff:FileUpload ID="FileUpload401" runat="server" 161 Accept="text/plain" 162 CachePostedFile="False" 163 AllowMultiple="True" 164 OnFileSelected="FileUpload401_OnFileSelected" /> 165 </div> 166 167 <h3>キャッシュ有り</h3> 168 <div> 169 Page.Load<asp:Literal runat="server" ID="Literal4021"/> 170 </div> 171 <div> 172 Button.Click<asp:Literal runat="server" ID="Literal4022"/> 173 </div> 174 <div> 175 FileUpload.FileSelected<asp:Literal runat="server" ID="Literal4023"/> 176 </div> 177 <div> 178 <asp:Button runat="server" ID="Button402" 179 Text="Button402" 180 OnClick="Button402_OnClick"/> 181 <sff:FileUpload ID="FileUpload402" runat="server" 182 Accept="text/plain" 183 CachePostedFile="True" 184 AllowMultiple="True" 185 OnFileSelected="FileUpload402_OnFileSelected" /> 186 </div> 187 188 <h3>キャッシュ有り + leaveOpen</h3> 189 <div> 190 Page.Load<asp:Literal runat="server" ID="Literal4031"/> 191 </div> 192 <div> 193 Button.Click<asp:Literal runat="server" ID="Literal4032"/> 194 </div> 195 <div> 196 FileUpload.FileSelected<asp:Literal runat="server" ID="Literal4033"/> 197 </div> 198 <div> 199 <asp:Button runat="server" ID="Button403" 200 Text="Button403" 201 OnClick="Button403_OnClick"/> 202 <sff:FileUpload ID="FileUpload403" runat="server" 203 Accept="text/plain" 204 CachePostedFile="True" 205 AllowMultiple="True" 206 OnFileSelected="FileUpload403_OnFileSelected" /> 207 </div> 208 209 210 <h2>asp:UploadFile</h2> 211 212 <h3>通常</h3> 213 <div> 214 Page.Load<asp:Literal runat="server" ID="Literal9011"/> 215 </div> 216 <div> 217 Button.Click<asp:Literal runat="server" ID="Literal9012"/> 218 </div> 219 <div> 220 <asp:Button runat="server" ID="Button901" 221 Text="Button901" 222 OnClick="Button901_OnClick"/> 223 <asp:FileUpload ID="FileUpload901" runat="server" 224 Accept="text/plain" /> 225 </div> 226 227 <h3>AllowMultiple</h3> 228 <div> 229 Page.Load<asp:Literal runat="server" ID="Literal9021"/> 230 </div> 231 <div> 232 Button.Click<asp:Literal runat="server" ID="Literal9022"/> 233 </div> 234 <div> 235 <asp:Button runat="server" ID="Button902" 236 Text="Button902" 237 OnClick="Button902_OnClick"/> 238 <asp:FileUpload ID="FileUpload902" runat="server" 239 Accept="text/plain" 240 AllowMultiple="True" /> 241 </div> 242 80 243 </div> 81 244 </form> -
framework/trunk/WebApplication/UI/WebControls/FileUploadPage.aspx.cs
r1635 r1639 24 24 { 25 25 using System; 26 using System.Collections.Generic; 27 using System.IO; 28 using System.Text; 26 29 using System.Web; 27 30 … … 34 37 { 35 38 /// <summary> 39 /// ポストバックの回数。 40 /// </summary> 41 [ViewStateMember] 42 private int counter; 43 44 45 /// <summary> 36 46 /// インスタンスを作成します。 37 47 /// </summary> 38 48 public FileUploadPage() 39 49 { 40 // AVOID 41 } 42 50 Load += Page_OnLoad; 51 } 52 53 /// <summary> 54 /// <see cref="System.Web.UI.Control.Load"/> イベントハンドラです。 55 /// </summary> 56 /// <param name="sender">イベントのソース。</param> 57 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 58 protected void Page_OnLoad(object sender, EventArgs e) 59 { 60 counter++; 61 62 Literal3011.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload301); 63 Literal3021.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload302); 64 Literal3031.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload303, true); 65 Literal4011.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload401); 66 Literal4021.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload402); 67 Literal4031.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload403, true); 68 Literal9011.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload901); 69 Literal9021.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload902); 70 } 43 71 44 72 /// <summary> … … 72 100 } 73 101 102 /// <summary> 103 /// <see cref="Button301"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 104 /// </summary> 105 /// <param name="sender">イベントのソース。</param> 106 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 107 protected void Button301_OnClick(object sender, EventArgs e) 108 { 109 Literal3012.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload301); 110 } 111 112 /// <summary> 113 /// <see cref="FileUpload301"/> の <see cref="FileUpload.FileSelected"/> イベントハンドラです。 114 /// </summary> 115 /// <param name="sender">イベントのソース。</param> 116 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 117 protected void FileUpload301_OnFileSelected(object sender, EventArgs e) 118 { 119 Literal3013.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload301); 120 } 121 122 /// <summary> 123 /// <see cref="Button302"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 124 /// </summary> 125 /// <param name="sender">イベントのソース。</param> 126 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 127 protected void Button302_OnClick(object sender, EventArgs e) 128 { 129 Literal3022.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload302); 130 } 131 132 /// <summary> 133 /// <see cref="FileUpload302"/> の <see cref="FileUpload.FileSelected"/> イベントハンドラです。 134 /// </summary> 135 /// <param name="sender">イベントのソース。</param> 136 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 137 protected void FileUpload302_OnFileSelected(object sender, EventArgs e) 138 { 139 Literal3023.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload302); 140 } 141 142 /// <summary> 143 /// <see cref="Button303"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 144 /// </summary> 145 /// <param name="sender">イベントのソース。</param> 146 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 147 protected void Button303_OnClick(object sender, EventArgs e) 148 { 149 Literal3032.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload303, true); 150 } 151 152 /// <summary> 153 /// <see cref="FileUpload303"/> の <see cref="FileUpload.FileSelected"/> イベントハンドラです。 154 /// </summary> 155 /// <param name="sender">イベントのソース。</param> 156 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 157 protected void FileUpload303_OnFileSelected(object sender, EventArgs e) 158 { 159 Literal3033.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload303, true); 160 } 161 162 163 /// <summary> 164 /// <see cref="Button401"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 165 /// </summary> 166 /// <param name="sender">イベントのソース。</param> 167 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 168 protected void Button401_OnClick(object sender, EventArgs e) 169 { 170 Literal4012.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload401); 171 } 172 173 /// <summary> 174 /// <see cref="FileUpload401"/> の <see cref="FileUpload.FileSelected"/> イベントハンドラです。 175 /// </summary> 176 /// <param name="sender">イベントのソース。</param> 177 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 178 protected void FileUpload401_OnFileSelected(object sender, EventArgs e) 179 { 180 Literal4013.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload401); 181 } 182 183 /// <summary> 184 /// <see cref="Button402"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 185 /// </summary> 186 /// <param name="sender">イベントのソース。</param> 187 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 188 protected void Button402_OnClick(object sender, EventArgs e) 189 { 190 Literal4022.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload402); 191 } 192 193 /// <summary> 194 /// <see cref="FileUpload402"/> の <see cref="FileUpload.FileSelected"/> イベントハンドラです。 195 /// </summary> 196 /// <param name="sender">イベントのソース。</param> 197 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 198 protected void FileUpload402_OnFileSelected(object sender, EventArgs e) 199 { 200 Literal4023.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload402); 201 } 202 203 /// <summary> 204 /// <see cref="Button403"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 205 /// </summary> 206 /// <param name="sender">イベントのソース。</param> 207 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 208 protected void Button403_OnClick(object sender, EventArgs e) 209 { 210 Literal4032.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload403, true); 211 } 212 213 /// <summary> 214 /// <see cref="FileUpload403"/> の <see cref="FileUpload.FileSelected"/> イベントハンドラです。 215 /// </summary> 216 /// <param name="sender">イベントのソース。</param> 217 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 218 protected void FileUpload403_OnFileSelected(object sender, EventArgs e) 219 { 220 Literal4033.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload403, true); 221 } 222 223 224 /// <summary> 225 /// <see cref="Button901"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 226 /// </summary> 227 /// <param name="sender">イベントのソース。</param> 228 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 229 protected void Button901_OnClick(object sender, EventArgs e) 230 { 231 Literal9012.Text = "[" + counter + "]: " + GetPostedFileInformation(FileUpload901); 232 } 233 234 /// <summary> 235 /// <see cref="Button902"/> の <see cref="System.Web.UI.WebControls.Button.Click"/> イベントハンドラです。 236 /// </summary> 237 /// <param name="sender">イベントのソース。</param> 238 /// <param name="e">イベント データを格納している <see cref="EventArgs"/>。</param> 239 protected void Button902_OnClick(object sender, EventArgs e) 240 { 241 Literal9022.Text = "[" + counter + "]: " + GetPostedFilesInformation(FileUpload902); 242 } 243 74 244 75 245 /// <summary> 76 246 /// ポストされたファイルの情報を取得します。 77 247 /// </summary> 248 /// <param name="fileUpload"><see cref="System.Web.UI.WebControls.FileUpload"/> コントロール。</param> 249 /// <returns> 250 /// ポストされたファイルの情報を表す文字列。 251 /// </returns> 252 private static string GetPostedFileInformation(System.Web.UI.WebControls.FileUpload fileUpload) 253 { 254 return GetPostedFileInformation(fileUpload, false); 255 } 256 257 /// <summary> 258 /// ポストされたファイルの情報を取得します。 259 /// </summary> 260 /// <param name="fileUpload"><see cref="System.Web.UI.WebControls.FileUpload"/> コントロール。</param> 261 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 262 /// <returns> 263 /// ポストされたファイルの情報を表す文字列。 264 /// </returns> 265 private static string GetPostedFileInformation(System.Web.UI.WebControls.FileUpload fileUpload, bool leaveOpen) 266 { 267 return GetPostedFileInformation(fileUpload.HasFile, fileUpload.PostedFile, leaveOpen); 268 } 269 270 271 /// <summary> 272 /// ポストされたファイルの情報を取得します。 273 /// </summary> 78 274 /// <param name="fileUpload"><see cref="FileUpload"/> コントロール。</param> 79 275 /// <returns> … … 82 278 private static string GetPostedFileInformation(FileUpload fileUpload) 83 279 { 84 HttpPostedFile postedFile = fileUpload.PostedFile; 85 if (postedFile == null || string.IsNullOrEmpty(postedFile.FileName)) 86 { 87 return "(none)"; 88 } 89 90 return postedFile.FileName 280 return GetPostedFileInformation(fileUpload, false); 281 } 282 283 /// <summary> 284 /// ポストされたファイルの情報を取得します。 285 /// </summary> 286 /// <param name="fileUpload"><see cref="FileUpload"/> コントロール。</param> 287 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 288 /// <returns> 289 /// ポストされたファイルの情報を表す文字列。 290 /// </returns> 291 private static string GetPostedFileInformation(FileUpload fileUpload, bool leaveOpen) 292 { 293 return GetPostedFileInformation(fileUpload.HasFile, fileUpload.PostedFile, leaveOpen); 294 } 295 296 297 /// <summary> 298 /// ポストされたファイルの情報を取得します。 299 /// </summary> 300 /// <param name="hasFile">ファイルが有るかどうか。</param> 301 /// <param name="postedFile"><see cref="HttpPostedFile"/> コントロール。</param> 302 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 303 /// <returns> 304 /// ポストされたファイルの情報を表す文字列。 305 /// </returns> 306 private static string GetPostedFileInformation(bool hasFile, HttpPostedFile postedFile, bool leaveOpen) 307 { 308 if (postedFile == null) 309 { 310 return !hasFile ? "NO FILE" : "(null !?)"; 311 } 312 313 return (hasFile ? string.Empty : "NO FILE, ") 314 + "name=" + postedFile.FileName 91 315 + ", length=" + postedFile.ContentLength 92 + ", type=" + postedFile.ContentType; 316 + ", type=" + postedFile.ContentType 317 + (postedFile.ContentType == "text/plain" 318 ? ", contents={" + GetContents(postedFile, leaveOpen) + "}" 319 : string.Empty); 320 } 321 322 323 324 /// <summary> 325 /// ポストされたファイルコレクションの情報を取得します。 326 /// </summary> 327 /// <param name="fileUpload"><see cref="System.Web.UI.WebControls.FileUpload"/> コントロール。</param> 328 /// <returns> 329 /// ポストされたファイルコレクションの情報を表す文字列。 330 /// </returns> 331 private static string GetPostedFilesInformation(System.Web.UI.WebControls.FileUpload fileUpload) 332 { 333 return GetPostedFilesInformation(fileUpload, false); 334 } 335 336 /// <summary> 337 /// ポストされたファイルコレクションの情報を取得します。 338 /// </summary> 339 /// <param name="fileUpload"><see cref="System.Web.UI.WebControls.FileUpload"/> コントロール。</param> 340 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 341 /// <returns> 342 /// ポストされたファイルコレクションの情報を表す文字列。 343 /// </returns> 344 private static string GetPostedFilesInformation(System.Web.UI.WebControls.FileUpload fileUpload, bool leaveOpen) 345 { 346 return GetPostedFilesInformation(fileUpload.HasFiles, fileUpload.PostedFiles, leaveOpen); 347 } 348 349 350 /// <summary> 351 /// ポストされたファイルコレクションの情報を取得します。 352 /// </summary> 353 /// <param name="fileUpload"><see cref="FileUpload"/> コントロール。</param> 354 /// <returns> 355 /// ポストされたファイルコレクションの情報を表す文字列。 356 /// </returns> 357 private static string GetPostedFilesInformation(FileUpload fileUpload) 358 { 359 return GetPostedFilesInformation(fileUpload, false); 360 } 361 362 /// <summary> 363 /// ポストされたファイルコレクションの情報を取得します。 364 /// </summary> 365 /// <param name="fileUpload"><see cref="FileUpload"/> コントロール。</param> 366 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 367 /// <returns> 368 /// ポストされたファイルコレクションの情報を表す文字列。 369 /// </returns> 370 private static string GetPostedFilesInformation(FileUpload fileUpload, bool leaveOpen) 371 { 372 return GetPostedFilesInformation(fileUpload.HasFiles, fileUpload.PostedFiles, leaveOpen); 373 } 374 375 376 /// <summary> 377 /// ポストされたファイルコレクションの情報を取得します。 378 /// </summary> 379 /// <param name="hasFiles">ファイルが有るかどうか。</param> 380 /// <param name="postedFiles"><see cref="HttpPostedFile"/> のリスト。</param> 381 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 382 /// <returns> 383 /// ポストされたファイルコレクションの情報を表す文字列。 384 /// </returns> 385 private static string GetPostedFilesInformation(bool hasFiles, IList<HttpPostedFile> postedFiles, bool leaveOpen) 386 { 387 if (postedFiles == null) 388 { 389 return !hasFiles ? "NO FILEs + null" : "(null !?)"; 390 } 391 392 StringBuilder builder = new StringBuilder(); 393 394 if (!hasFiles) 395 { 396 builder.Append("NO FILEs"); 397 } 398 else if (postedFiles.Count == 0) 399 { 400 return "EMPTY"; 401 } 402 403 foreach (HttpPostedFile postedFile in postedFiles) 404 { 405 if (builder.Length > 0) 406 { 407 builder.Append(", "); 408 } 409 410 builder.Append("[name="); 411 builder.Append(postedFile.FileName); 412 builder.Append(", length="); 413 builder.Append(postedFile.ContentLength); 414 builder.Append(", type="); 415 builder.Append(postedFile.ContentType); 416 417 if (postedFile.ContentType == "text/plain") 418 { 419 builder.Append(", contents={"); 420 builder.Append(GetContents(postedFile, leaveOpen)); 421 builder.Append("}"); 422 } 423 424 builder.Append("]"); 425 } 426 427 return builder.ToString(); 428 } 429 430 431 /// <summary> 432 /// 内容を文字列で返します。 433 /// </summary> 434 /// <param name="postedFile"><see cref="HttpPostedFile"/>。</param> 435 /// <param name="leaveOpen">ストリームを開いたままにする場合は <see langword="true"/>。</param> 436 /// <returns> 437 /// ファイルの内容。 438 /// </returns> 439 private static string GetContents(HttpPostedFile postedFile, bool leaveOpen) 440 { 441 if (leaveOpen) 442 { 443 postedFile.InputStream.Seek(0, SeekOrigin.Begin); 444 } 445 446 using (StreamReader reader 447 = new StreamReader( 448 postedFile.InputStream, 449 Encoding.Default, 450 true, 451 0x100, 452 leaveOpen)) 453 { 454 return reader.ReadToEnd(); 455 } 93 456 } 94 457 } -
framework/trunk/WebApplication/UI/WebControls/FileUploadPage.aspx.designer.cs
r1637 r1639 93 93 /// </remarks> 94 94 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload202; 95 96 /// <summary> 97 /// Literal3011 コントロール。 98 /// </summary> 99 /// <remarks> 100 /// 自動生成されたフィールド。 101 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 102 /// </remarks> 103 protected global::System.Web.UI.WebControls.Literal Literal3011; 104 105 /// <summary> 106 /// Literal3012 コントロール。 107 /// </summary> 108 /// <remarks> 109 /// 自動生成されたフィールド。 110 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 111 /// </remarks> 112 protected global::System.Web.UI.WebControls.Literal Literal3012; 113 114 /// <summary> 115 /// Literal3013 コントロール。 116 /// </summary> 117 /// <remarks> 118 /// 自動生成されたフィールド。 119 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 120 /// </remarks> 121 protected global::System.Web.UI.WebControls.Literal Literal3013; 122 123 /// <summary> 124 /// Button301 コントロール。 125 /// </summary> 126 /// <remarks> 127 /// 自動生成されたフィールド。 128 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 129 /// </remarks> 130 protected global::System.Web.UI.WebControls.Button Button301; 131 132 /// <summary> 133 /// FileUpload301 コントロール。 134 /// </summary> 135 /// <remarks> 136 /// 自動生成されたフィールド。 137 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 138 /// </remarks> 139 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload301; 140 141 /// <summary> 142 /// Literal3021 コントロール。 143 /// </summary> 144 /// <remarks> 145 /// 自動生成されたフィールド。 146 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 147 /// </remarks> 148 protected global::System.Web.UI.WebControls.Literal Literal3021; 149 150 /// <summary> 151 /// Literal3022 コントロール。 152 /// </summary> 153 /// <remarks> 154 /// 自動生成されたフィールド。 155 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 156 /// </remarks> 157 protected global::System.Web.UI.WebControls.Literal Literal3022; 158 159 /// <summary> 160 /// Literal3023 コントロール。 161 /// </summary> 162 /// <remarks> 163 /// 自動生成されたフィールド。 164 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 165 /// </remarks> 166 protected global::System.Web.UI.WebControls.Literal Literal3023; 167 168 /// <summary> 169 /// Button302 コントロール。 170 /// </summary> 171 /// <remarks> 172 /// 自動生成されたフィールド。 173 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 174 /// </remarks> 175 protected global::System.Web.UI.WebControls.Button Button302; 176 177 /// <summary> 178 /// FileUpload302 コントロール。 179 /// </summary> 180 /// <remarks> 181 /// 自動生成されたフィールド。 182 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 183 /// </remarks> 184 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload302; 185 186 /// <summary> 187 /// Literal3031 コントロール。 188 /// </summary> 189 /// <remarks> 190 /// 自動生成されたフィールド。 191 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 192 /// </remarks> 193 protected global::System.Web.UI.WebControls.Literal Literal3031; 194 195 /// <summary> 196 /// Literal3032 コントロール。 197 /// </summary> 198 /// <remarks> 199 /// 自動生成されたフィールド。 200 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 201 /// </remarks> 202 protected global::System.Web.UI.WebControls.Literal Literal3032; 203 204 /// <summary> 205 /// Literal3033 コントロール。 206 /// </summary> 207 /// <remarks> 208 /// 自動生成されたフィールド。 209 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 210 /// </remarks> 211 protected global::System.Web.UI.WebControls.Literal Literal3033; 212 213 /// <summary> 214 /// Button303 コントロール。 215 /// </summary> 216 /// <remarks> 217 /// 自動生成されたフィールド。 218 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 219 /// </remarks> 220 protected global::System.Web.UI.WebControls.Button Button303; 221 222 /// <summary> 223 /// FileUpload303 コントロール。 224 /// </summary> 225 /// <remarks> 226 /// 自動生成されたフィールド。 227 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 228 /// </remarks> 229 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload303; 230 231 /// <summary> 232 /// Literal4011 コントロール。 233 /// </summary> 234 /// <remarks> 235 /// 自動生成されたフィールド。 236 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 237 /// </remarks> 238 protected global::System.Web.UI.WebControls.Literal Literal4011; 239 240 /// <summary> 241 /// Literal4012 コントロール。 242 /// </summary> 243 /// <remarks> 244 /// 自動生成されたフィールド。 245 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 246 /// </remarks> 247 protected global::System.Web.UI.WebControls.Literal Literal4012; 248 249 /// <summary> 250 /// Literal4013 コントロール。 251 /// </summary> 252 /// <remarks> 253 /// 自動生成されたフィールド。 254 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 255 /// </remarks> 256 protected global::System.Web.UI.WebControls.Literal Literal4013; 257 258 /// <summary> 259 /// Button401 コントロール。 260 /// </summary> 261 /// <remarks> 262 /// 自動生成されたフィールド。 263 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 264 /// </remarks> 265 protected global::System.Web.UI.WebControls.Button Button401; 266 267 /// <summary> 268 /// FileUpload401 コントロール。 269 /// </summary> 270 /// <remarks> 271 /// 自動生成されたフィールド。 272 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 273 /// </remarks> 274 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload401; 275 276 /// <summary> 277 /// Literal4021 コントロール。 278 /// </summary> 279 /// <remarks> 280 /// 自動生成されたフィールド。 281 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 282 /// </remarks> 283 protected global::System.Web.UI.WebControls.Literal Literal4021; 284 285 /// <summary> 286 /// Literal4022 コントロール。 287 /// </summary> 288 /// <remarks> 289 /// 自動生成されたフィールド。 290 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 291 /// </remarks> 292 protected global::System.Web.UI.WebControls.Literal Literal4022; 293 294 /// <summary> 295 /// Literal4023 コントロール。 296 /// </summary> 297 /// <remarks> 298 /// 自動生成されたフィールド。 299 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 300 /// </remarks> 301 protected global::System.Web.UI.WebControls.Literal Literal4023; 302 303 /// <summary> 304 /// Button402 コントロール。 305 /// </summary> 306 /// <remarks> 307 /// 自動生成されたフィールド。 308 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 309 /// </remarks> 310 protected global::System.Web.UI.WebControls.Button Button402; 311 312 /// <summary> 313 /// FileUpload402 コントロール。 314 /// </summary> 315 /// <remarks> 316 /// 自動生成されたフィールド。 317 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 318 /// </remarks> 319 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload402; 320 321 /// <summary> 322 /// Literal4031 コントロール。 323 /// </summary> 324 /// <remarks> 325 /// 自動生成されたフィールド。 326 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 327 /// </remarks> 328 protected global::System.Web.UI.WebControls.Literal Literal4031; 329 330 /// <summary> 331 /// Literal4032 コントロール。 332 /// </summary> 333 /// <remarks> 334 /// 自動生成されたフィールド。 335 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 336 /// </remarks> 337 protected global::System.Web.UI.WebControls.Literal Literal4032; 338 339 /// <summary> 340 /// Literal4033 コントロール。 341 /// </summary> 342 /// <remarks> 343 /// 自動生成されたフィールド。 344 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 345 /// </remarks> 346 protected global::System.Web.UI.WebControls.Literal Literal4033; 347 348 /// <summary> 349 /// Button403 コントロール。 350 /// </summary> 351 /// <remarks> 352 /// 自動生成されたフィールド。 353 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 354 /// </remarks> 355 protected global::System.Web.UI.WebControls.Button Button403; 356 357 /// <summary> 358 /// FileUpload403 コントロール。 359 /// </summary> 360 /// <remarks> 361 /// 自動生成されたフィールド。 362 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 363 /// </remarks> 364 protected global::FCSoft.SilverFrost.Framework.Web.UI.WebControls.FileUpload FileUpload403; 365 366 /// <summary> 367 /// Literal9011 コントロール。 368 /// </summary> 369 /// <remarks> 370 /// 自動生成されたフィールド。 371 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 372 /// </remarks> 373 protected global::System.Web.UI.WebControls.Literal Literal9011; 374 375 /// <summary> 376 /// Literal9012 コントロール。 377 /// </summary> 378 /// <remarks> 379 /// 自動生成されたフィールド。 380 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 381 /// </remarks> 382 protected global::System.Web.UI.WebControls.Literal Literal9012; 383 384 /// <summary> 385 /// Button901 コントロール。 386 /// </summary> 387 /// <remarks> 388 /// 自動生成されたフィールド。 389 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 390 /// </remarks> 391 protected global::System.Web.UI.WebControls.Button Button901; 392 393 /// <summary> 394 /// FileUpload901 コントロール。 395 /// </summary> 396 /// <remarks> 397 /// 自動生成されたフィールド。 398 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 399 /// </remarks> 400 protected global::System.Web.UI.WebControls.FileUpload FileUpload901; 401 402 /// <summary> 403 /// Literal9021 コントロール。 404 /// </summary> 405 /// <remarks> 406 /// 自動生成されたフィールド。 407 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 408 /// </remarks> 409 protected global::System.Web.UI.WebControls.Literal Literal9021; 410 411 /// <summary> 412 /// Literal9022 コントロール。 413 /// </summary> 414 /// <remarks> 415 /// 自動生成されたフィールド。 416 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 417 /// </remarks> 418 protected global::System.Web.UI.WebControls.Literal Literal9022; 419 420 /// <summary> 421 /// Button902 コントロール。 422 /// </summary> 423 /// <remarks> 424 /// 自動生成されたフィールド。 425 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 426 /// </remarks> 427 protected global::System.Web.UI.WebControls.Button Button902; 428 429 /// <summary> 430 /// FileUpload902 コントロール。 431 /// </summary> 432 /// <remarks> 433 /// 自動生成されたフィールド。 434 /// 変更するには、フィールドの宣言をデザイナー ファイルから分離コード ファイルに移動します。 435 /// </remarks> 436 protected global::System.Web.UI.WebControls.FileUpload FileUpload902; 95 437 } 96 438 } -
framework/trunk/WebLibrary/Sources/Reflections.cs
r1624 r1639 163 163 164 164 /// <summary> 165 /// <see cref="System.Web.HttpRawUploadedContent"/> に関係するリフレクションの集合です。 166 /// </summary> 167 internal static class HttpRawUploadedContent 168 { 169 /// <summary> 170 /// 実際の型です。 171 /// </summary> 172 private static readonly Type RealTypeInstance; 173 174 /// <summary> 175 /// インスタンスを作成するデリゲートです。 176 /// </summary> 177 private static readonly Func<int, int, object> CreateInstanceDelegate; 178 179 /// <summary> 180 /// <c>_data</c> フィールドに値を設定するデリゲートです。 181 /// </summary> 182 private static readonly Action<object, byte[]> SetDataDelegate; 183 184 /// <summary> 185 /// <c>_length</c> フィールドに値を設定するデリゲートです。 186 /// </summary> 187 private static readonly Action<object, int> SetLengthDelegate; 188 189 /// <summary> 190 /// <c>DoneAddingBytes</c> メソッドを呼び出すデリゲートです。 191 /// </summary> 192 private static readonly Action<object> DoneAddingBytesDelegate; 193 194 195 /// <summary> 196 /// クラスを初期化します。 197 /// </summary> 198 static HttpRawUploadedContent() 199 { 200 Type type = typeof(System.Web.HttpPostedFile).Assembly.GetType("System.Web.HttpRawUploadedContent", false); 201 if (type == null) 202 { 203 return; 204 } 205 206 RealTypeInstance = type; 207 208 ConstructorInfo constructorInfo 209 = type.GetConstructor( 210 BindingFlags.Instance | BindingFlags.NonPublic, 211 null, 212 new[] { typeof(int), typeof(int) }, 213 null); 214 if (constructorInfo == null) 215 { 216 return; 217 } 218 219 CreateInstanceDelegate = delegate(int fileThreshold, int expectedLength) 220 { 221 return constructorInfo.Invoke(new object[] { fileThreshold, expectedLength }); 222 }; 223 224 225 FieldInfo dataFieldInfo = type.GetField("_data", BindingFlags.Instance | BindingFlags.NonPublic); 226 if (dataFieldInfo == null) 227 { 228 return; 229 } 230 231 SetDataDelegate = delegate(object obj, byte[] data) 232 { 233 dataFieldInfo.SetValue(obj, data); 234 }; 235 236 237 FieldInfo lengthFieldInfo = type.GetField("_length", BindingFlags.Instance | BindingFlags.NonPublic); 238 if (lengthFieldInfo == null) 239 { 240 return; 241 } 242 243 SetLengthDelegate = delegate(object obj, int length) 244 { 245 lengthFieldInfo.SetValue(obj, length); 246 }; 247 248 249 MethodInfo doneAddingBytesMethodInfo 250 = type.GetMethod("DoneAddingBytes", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); 251 if (doneAddingBytesMethodInfo == null) 252 { 253 return; 254 } 255 256 DoneAddingBytesDelegate = delegate(object obj) 257 { 258 doneAddingBytesMethodInfo.Invoke(obj, null); 259 }; 260 } 261 262 263 /// <summary> 264 /// 使用出来るかどうかを返します。 265 /// </summary> 266 /// <value> 267 /// 使用出来る場合は <see langword="true"/>。 268 /// それ以外の場合は <see langword="false"/>。 269 /// </value> 270 internal static bool IsValid 271 { 272 get 273 { 274 return DoneAddingBytesDelegate != null; 275 } 276 } 277 278 /// <summary> 279 /// 実際の型を返します。 280 /// </summary> 281 /// <value> 282 /// 実際の型。 283 /// </value> 284 internal static Type RealType 285 { 286 get 287 { 288 return RealTypeInstance; 289 } 290 } 291 292 293 /// <summary> 294 /// インスタンスを作成して返します。 295 /// </summary> 296 /// <param name="data">インスタンスで保持するデータ。</param> 297 /// <returns> 298 /// 作成されたインスタンス。 299 /// </returns> 300 internal static object CreateInstance(byte[] data) 301 { 302 if (CreateInstanceDelegate == null) 303 { 304 return null; 305 } 306 307 object obj = CreateInstanceDelegate(data.Length, 0); 308 SetDataDelegate(obj, data); 309 SetLengthDelegate(obj, data.Length); 310 DoneAddingBytesDelegate(obj); 311 312 return obj; 313 } 314 } 315 316 317 /// <summary> 318 /// <see cref="System.Web.HttpInputStream"/> に関係するリフレクションの集合です。 319 /// </summary> 320 internal static class HttpInputStream 321 { 322 /// <summary> 323 /// 実際の型です。 324 /// </summary> 325 private static readonly Type RealTypeInstance; 326 327 /// <summary> 328 /// インスタンスを作成するデリゲートです。 329 /// </summary> 330 private static readonly Func<object, int, int, object> CreateInstanceDelegate; 331 332 /// <summary> 333 /// <c>GetAsByteArray</c> メソッドを呼び出すデリゲートです。 334 /// </summary> 335 private static readonly Func<object, byte[]> GetAsByteArrayDelegate; 336 337 338 /// <summary> 339 /// クラスを初期化します。 340 /// </summary> 341 static HttpInputStream() 342 { 343 if (!HttpRawUploadedContent.IsValid) 344 { 345 return; 346 } 347 348 Type type = typeof(System.Web.HttpPostedFile).Assembly.GetType("System.Web.HttpInputStream", false); 349 if (type == null) 350 { 351 return; 352 } 353 354 RealTypeInstance = type; 355 356 ConstructorInfo constructorInfo 357 = type.GetConstructor( 358 BindingFlags.Instance | BindingFlags.NonPublic, 359 null, 360 new[] { HttpRawUploadedContent.RealType, typeof(int), typeof(int) }, 361 null); 362 if (constructorInfo == null) 363 { 364 return; 365 } 366 367 CreateInstanceDelegate = delegate(object data, int offset, int length) 368 { 369 return constructorInfo.Invoke(new[] { data, offset, length }); 370 }; 371 372 373 MethodInfo getAsByteArrayMethodInfo 374 = type.GetMethod("GetAsByteArray", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); 375 if (getAsByteArrayMethodInfo == null) 376 { 377 return; 378 } 379 380 GetAsByteArrayDelegate = delegate(object obj) 381 { 382 return (byte[])getAsByteArrayMethodInfo.Invoke(obj, null); 383 }; 384 } 385 386 387 /// <summary> 388 /// 使用出来るかどうかを返します。 389 /// </summary> 390 /// <value> 391 /// 使用出来る場合は <see langword="true"/>。 392 /// それ以外の場合は <see langword="false"/>。 393 /// </value> 394 internal static bool IsValid 395 { 396 get 397 { 398 return CreateInstanceDelegate != null 399 && GetAsByteArrayDelegate != null; 400 } 401 } 402 403 /// <summary> 404 /// 実際の型を返します。 405 /// </summary> 406 /// <value> 407 /// 実際の型。 408 /// </value> 409 internal static Type RealType 410 { 411 get 412 { 413 return RealTypeInstance; 414 } 415 } 416 417 418 /// <summary> 419 /// インスタンスを作成して返します。 420 /// </summary> 421 /// <param name="data">アップロードしたコンテンツ。</param> 422 /// <param name="offset">オフセット。</param> 423 /// <param name="length">長さ。</param> 424 /// <returns> 425 /// 作成されたインスタンス。 426 /// </returns> 427 internal static object CreateInstance(object data, int offset, int length) 428 { 429 if (CreateInstanceDelegate == null) 430 { 431 return null; 432 } 433 434 return CreateInstanceDelegate(data, offset, length); 435 } 436 437 /// <summary> 438 /// 全てのデータのバイト配列を作成して返します。 439 /// </summary> 440 /// <param name="obj">オブジェクト。</param> 441 /// <returns> 442 /// 全てのデータのバイト配列。 443 /// </returns> 444 internal static byte[] GetAsByteArray(object obj) 445 { 446 if (GetAsByteArrayDelegate == null) 447 { 448 return null; 449 } 450 451 return GetAsByteArrayDelegate(obj); 452 } 453 } 454 455 456 /// <summary> 457 /// <see cref="System.Web.HttpPostedFile"/> に関係するリフレクションの集合です。 458 /// </summary> 459 internal static class HttpPostedFile 460 { 461 /// <summary> 462 /// インスタンスを作成するデリゲートです。 463 /// </summary> 464 private static readonly Func<string, string, object, System.Web.HttpPostedFile> CreateInstanceDelegate; 465 466 467 /// <summary> 468 /// クラスを初期化します。 469 /// </summary> 470 static HttpPostedFile() 471 { 472 if (!HttpInputStream.IsValid) 473 { 474 return; 475 } 476 477 ConstructorInfo constructorInfo 478 = typeof(System.Web.HttpPostedFile).GetConstructor( 479 BindingFlags.Instance | BindingFlags.NonPublic, 480 null, 481 new[] { typeof(string), typeof(string), HttpInputStream.RealType }, 482 null); 483 if (constructorInfo == null) 484 { 485 return; 486 } 487 488 CreateInstanceDelegate = delegate(string filename, string contentType, object stream) 489 { 490 return (System.Web.HttpPostedFile)constructorInfo.Invoke(new[] { filename, contentType, stream }); 491 }; 492 } 493 494 495 /// <summary> 496 /// 使用出来るかどうかを返します。 497 /// </summary> 498 /// <value> 499 /// 使用出来る場合は <see langword="true"/>。 500 /// それ以外の場合は <see langword="false"/>。 501 /// </value> 502 internal static bool IsValid 503 { 504 get 505 { 506 return CreateInstanceDelegate != null; 507 } 508 } 509 510 511 /// <summary> 512 /// インスタンスを作成して返します。 513 /// </summary> 514 /// <param name="filename">ファイル名。</param> 515 /// <param name="contentType">コンテンツタイプ。</param> 516 /// <param name="stream">ストリーム。</param> 517 /// <returns> 518 /// 作成されたインスタンス。 519 /// </returns> 520 internal static System.Web.HttpPostedFile CreateInstance(string filename, string contentType, object stream) 521 { 522 if (CreateInstanceDelegate == null) 523 { 524 return null; 525 } 526 527 return CreateInstanceDelegate(filename, contentType, stream); 528 } 529 } 530 531 532 /// <summary> 165 533 /// <see cref="System.Web.Security.FormsAuthentication"/> に関係するリフレクションの集合です。 166 534 /// </summary> -
framework/trunk/WebLibrary/Sources/UI/WebControls/FileUpload.cs
r1637 r1639 24 24 { 25 25 using System; 26 using System.Collections.Generic; 27 using System.Collections.ObjectModel; 26 28 using System.Collections.Specialized; 27 29 using System.ComponentModel; 30 using System.Diagnostics; 31 using System.IO; 28 32 using System.Web; 29 33 using System.Web.UI; … … 31 35 32 36 /// <summary> 33 /// ユーザーがファイルを選択してサーバーにアップロードするための 34 /// テキスト ボックス コントロールと参照ボタンを表示します。 37 /// ユーザーがファイルを選択してサーバーにアップロードするための参照ボタンを表示します。 35 38 /// </summary> 36 39 [WebDescription("Description_FileUpload")] … … 61 64 private const string ValidationGroupKey = "ValidationGroup"; 62 65 66 /// <summary> 67 /// <see cref="CachePostedFile"/> プロパティ用のキー。 68 /// </summary> 69 private const string CachePostedFileKey = "CachePostedFile"; 70 63 71 64 72 /// <summary> … … 66 74 /// </summary> 67 75 private static readonly object EventFileSelectedKey = new object(); 76 77 /// <summary> 78 /// 空の <see cref="HttpPostedFile"/> の配列。 79 /// </summary> 80 private static readonly HttpPostedFile[] EmptyPostedFiles = new HttpPostedFile[0]; 81 82 83 /// <summary> 84 /// キャッシュしたファイルのコレクション。 85 /// </summary> 86 private CachedPostedFileCollection cachedPostedFiles; 87 88 /// <summary> 89 /// ファイルの情報をクリアするかどうか。 90 /// </summary> 91 private bool clearFiles; 68 92 69 93 … … 204 228 } 205 229 230 /// <summary> 231 /// <see cref="FileUpload"/> コントロールを使用してアップロードされたファイルを 232 /// 保持し続けるかどうかを設定または取得します。 233 /// </summary> 234 /// <value> 235 /// ポストされたファイルを保持する場合は <see langword="true"/>。 236 /// それ以外の場合は <see langword="false"/>。 237 /// 既定値は <see langword="false"/>。 238 /// </value> 239 /// <remarks> 240 /// <para> 241 /// このプロパティを <see langword="true"/> に設定すると、 242 /// アップロードが行われたポストバック時にアップロードされたファイルをビューステートに保持し、 243 /// 次回のポストバック時にアップロードされたファイルの内容にアクセスできるようになります。 244 /// </para> 245 /// <para> 246 /// 保持しているファイルをクリアしたい場合は <see cref="ClearFiles"/> 247 /// メソッドを呼び出します。 248 /// </para> 249 /// </remarks> 250 [Themeable(false)] 251 [DefaultValue(false)] 252 [WebCategory("Behavior")] 253 [WebDescription("Description_CachePostedFile")] 254 public virtual bool CachePostedFile 255 { 256 get 257 { 258 return (bool)(ViewState[CachePostedFileKey] ?? false); 259 } 260 261 set 262 { 263 ViewState[CachePostedFileKey] = value; 264 } 265 } 266 267 268 /// <summary> 269 /// <see cref="FileUpload"/> コントロールを使用してアップロードされたファイルに格納されているバイトの配列を取得します。 270 /// </summary> 271 /// <value> 272 /// アップロードされたファイルに格納されていた <see cref="byte"/> 配列。 273 /// </value> 274 /// <remarks> 275 /// <see cref="CachePostedFile"/> が <see langword="true"/> の場合、 276 /// 一度格納されたファイルはポストバックを繰り返しても保持されます。 277 /// この場合、このプロパティは最後にアップロードされた時のファイルに格納されていたバイト配列を返します。 278 /// </remarks> 279 [Browsable(false)] 280 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 281 public new byte[] FileBytes 282 { 283 get 284 { 285 HttpPostedFile postedFile = PostedFile; 286 return postedFile != null 287 ? Reflections.HttpInputStream.GetAsByteArray(postedFile.InputStream) 288 : new byte[0]; 289 } 290 } 291 292 /// <summary> 293 /// <see cref="FileUpload"/> コントロールを使用してアップロードされたファイルを指す 294 /// <see cref="Stream"/> オブジェクトを取得します。 295 /// </summary> 296 /// <value> 297 /// <see cref="FileUpload"/> を使用してアップロードされたファイルを指す <see cref="Stream"/>。 298 /// </value> 299 /// <remarks> 300 /// <see cref="CachePostedFile"/> が <see langword="true"/> の場合、 301 /// 一度格納されたファイルはポストバックを繰り返しても保持されます。 302 /// この場合、このプロパティは最後にアップロードされた時のファイルを指すストリームを返します。 303 /// </remarks> 304 [Browsable(false)] 305 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 306 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 307 public new Stream FileContent 308 { 309 get 310 { 311 HttpPostedFile postedFile = PostedFile; 312 return postedFile != null 313 ? postedFile.InputStream 314 : Stream.Null; 315 } 316 } 317 318 /// <summary> 319 /// ファイルが <see cref="FileUpload"/> コントロールに格納されているかどうかを示す値を取得します。 320 /// </summary> 321 /// <value> 322 /// ファイルが <see cref="FileUpload"/> コントロールに格納されている場合は <see langword="true"/>。 323 /// それ以外の場合は <see langword="false"/>。 324 /// ASP.NET の標準の実装とは異なり、空のファイルをアップロードした場合でも <see langword="true"/> を返します。 325 /// また、ファイルのストリームをクローズした後でも <see langword="true"/> を返しますが、 326 /// ファイルの長さ (<see cref="HttpPostedFile.ContentLength"/>) は <c>0</c> となります。 327 /// </value> 328 /// <remarks> 329 /// <see cref="CachePostedFile"/> が <see langword="true"/> の場合、 330 /// 一度格納されたファイルはポストバックを繰り返しても保持されます。 331 /// この場合、このプロパティは <see langword="true"/> を返します。 332 /// </remarks> 333 [Browsable(false)] 334 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 335 public new bool HasFile 336 { 337 get 338 { 339 return PostedFile != null; 340 } 341 } 342 343 /// <summary> 344 /// ファイルが <see cref="FileUpload"/> コントロールに格納されているかどうかを示す値を取得します。 345 /// </summary> 346 /// <value> 347 /// ファイルが <see cref="FileUpload"/> コントロールに格納されている場合は <see langword="true"/>。 348 /// それ以外の場合は <see langword="false"/>。 349 /// ASP.NET の標準の実装とは異なり、空のファイルをアップロードした場合でも <see langword="true"/> を返します。 350 /// また、ファイルのストリームをクローズした後でも <see langword="true"/> を返しますが、 351 /// ファイルの長さ (<see cref="HttpPostedFile.ContentLength"/>) は <c>0</c> となります。 352 /// </value> 353 /// <remarks> 354 /// <see cref="CachePostedFile"/> が <see langword="true"/> の場合、 355 /// 一度格納されたファイルはポストバックを繰り返しても保持されます。 356 /// この場合、このプロパティは <see langword="true"/> を返します。 357 /// </remarks> 358 [Browsable(false)] 359 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 360 public new bool HasFiles 361 { 362 get 363 { 364 return PostedFiles.Count > 0; 365 } 366 } 367 368 /// <summary> 369 /// <see cref="FileUpload"/> コントロールを使用してアップロードされたファイルの基になる 370 /// <see cref="HttpPostedFile"/> オブジェクトを取得します。 371 /// </summary> 372 /// <value> 373 /// <see cref="FileUpload"/> コントロールを使用してアップロードされた <see cref="HttpPostedFile"/> オブジェクト。 374 /// <see cref="HasFile"/> プロパティが <see langword="false"/> 375 /// を返す場合は <see langword="null"/>です。 376 /// </value> 377 /// <remarks> 378 /// <see cref="CachePostedFile"/> が <see langword="true"/> の場合、 379 /// 一度格納されたファイルはポストバックを繰り返しても保持されます。 380 /// この場合、このプロパティは最後にアップロードされた時のファイルを返します。 381 /// </remarks> 382 [Browsable(false)] 383 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 384 public new HttpPostedFile PostedFile 385 { 386 get 387 { 388 // クリアされている場合 389 if (clearFiles) 390 { 391 return null; 392 } 393 394 Page page = Page; 395 if (page == null || !page.IsPostBack) 396 { 397 return null; 398 } 399 400 // キャッシュされていればキャッシュから返す 401 if (cachedPostedFiles != null) 402 { 403 return cachedPostedFiles.PostedFile; 404 } 405 406 HttpPostedFile postedFile = base.PostedFile; 407 return IsValidPostedFile(postedFile) 408 ? postedFile 409 : null; 410 } 411 } 412 413 /// <summary> 414 /// <see cref="FileUpload"/> コントロールを使用してアップロードされたファイルのコレクションを取得します。 415 /// </summary> 416 /// <value> 417 /// <see cref="FileUpload"/> コントロールを使用してアップロードされたファイルのコレクション。 418 /// <see cref="HasFiles"/> プロパティが <see langword="false"/> 419 /// を返す場合は空のコレクションです。 420 /// </value> 421 /// <remarks> 422 /// <see cref="CachePostedFile"/> が <see langword="true"/> の場合、 423 /// 一度格納されたファイルはポストバックを繰り返しても保持されます。 424 /// この場合、このプロパティは最後にアップロードされた時のファイルのコレクションを返します。 425 /// </remarks> 426 [Browsable(false)] 427 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 428 public new IList<HttpPostedFile> PostedFiles 429 { 430 get 431 { 432 // クリアされている場合 433 if (clearFiles) 434 { 435 return EmptyPostedFiles; 436 } 437 438 // キャッシュされていればキャッシュから返す 439 if (cachedPostedFiles != null) 440 { 441 return cachedPostedFiles.PostedFiles; 442 } 443 444 IList<HttpPostedFile> postedFiles = base.PostedFiles; 445 return IsValidPostedFiles(postedFiles) 446 ? postedFiles 447 : EmptyPostedFiles; 448 } 449 } 450 451 452 /// <summary> 453 /// このコントロールに格納されているファイル情報を削除します。 454 /// </summary> 455 public void ClearFiles() 456 { 457 cachedPostedFiles = null; 458 clearFiles = true; 459 } 460 206 461 207 462 #region IPostBackDataHandler メンバ … … 237 492 238 493 /// <summary> 494 /// <see cref="FileUpload"/> コントロールの保存された状態を読み込みます。 495 /// </summary> 496 /// <param name="savedState"> 497 /// <see cref="FileUpload"/> の保存された状態を格納している 498 /// <see cref="object"/>。 499 /// </param> 500 protected override void LoadViewState(object savedState) 501 { 502 if (savedState == null) 503 { 504 return; 505 } 506 507 Pair state = (Pair)savedState; 508 509 // 親を呼び出す 510 base.LoadViewState(state.First); 511 512 if (state.Second != null) 513 { 514 cachedPostedFiles = CachedPostedFileCollection.CreateFromViewState(state.Second); 515 } 516 } 517 518 /// <summary> 519 /// <see cref="FileUpload"/> コントロールの状態を格納します。 520 /// </summary> 521 /// <returns> 522 /// <see cref="FileUpload"/> の保存された状態を格納しているオブジェクト。 523 /// </returns> 524 protected override object SaveViewState() 525 { 526 // 親を呼び出す 527 Pair state = new Pair 528 { 529 First = base.SaveViewState(), 530 }; 531 532 // 保持するデータが有る場合 533 if (EnsurePostedFileCache()) 534 { 535 state.Second = cachedPostedFiles.ToViewState(); 536 } 537 538 if (state.First == null && state.Second == null) 539 { 540 return null; 541 } 542 543 return state; 544 } 545 546 /// <summary> 239 547 /// コントロールのポストバック データを処理します。 240 548 /// </summary> … … 256 564 } 257 565 258 // ファイルがポストされていれば true を返す 259 HttpPostedFile postedFile = PostedFile; 260 return postedFile != null 261 && (!string.IsNullOrEmpty(postedFile.FileName) || postedFile.ContentLength > 0); 566 // ファイルがポストされていなければ false を返す 567 if (!IsValidPostedFile(base.PostedFile)) 568 { 569 return false; 570 } 571 572 // ポストされたファイルが有るのでキャッシュをクリアしてキャッシュし直す 573 cachedPostedFiles = null; 574 EnsurePostedFileCache(); 575 576 return true; 262 577 } 263 578 … … 360 675 if (page != null) 361 676 { 677 string onChange = null; 678 if (HasAttributes) 679 { 680 onChange = Attributes["onchange"]; 681 if (onChange != null) 682 { 683 onChange = ClientScriptUtility.EnsureEndWithSemiColon(onChange); 684 Attributes.Remove("onchange"); 685 } 686 } 687 688 onChange = ClientScriptUtility.MergeScript(onChange, GetOnClientChanged(), false); 689 362 690 if (AutoPostBack) 363 691 { 364 string onChange = null;365 if (HasAttributes)366 {367 onChange = Attributes["onchange"];368 if (onChange != null)369 {370 onChange = ClientScriptUtility.EnsureEndWithSemiColon(onChange);371 Attributes.Remove("onchange");372 }373 }374 375 692 PostBackOptions options = new PostBackOptions(this, string.Empty); 376 693 if (CausesValidation) … … 385 702 } 386 703 387 writer.AddAttribute( 388 HtmlTextWriterAttribute.Onchange, 389 ClientScriptUtility.MergeScript(onChange, page.ClientScript.GetPostBackEventReference(options, true), false)); 704 onChange = ClientScriptUtility.MergeScript(onChange, page.ClientScript.GetPostBackEventReference(options, true), false); 390 705 } 391 706 else 392 707 { 708 // GetPostBackEventReference を呼び出していないので登録する 393 709 page.ClientScript.RegisterForEventValidation(UniqueID, string.Empty); 710 } 711 712 if (onChange != null) 713 { 714 writer.AddAttribute(HtmlTextWriterAttribute.Onchange, onChange); 394 715 } 395 716 } … … 403 724 base.AddAttributesToRender(writer); 404 725 } 726 727 /// <summary> 728 /// クライアントサイドで実行される <c>onchange</c> イベントハンドラを取得します。 729 /// </summary> 730 /// <returns> 731 /// クライアントサイドで実行される <c>onchange</c> イベントハンドラ。 732 /// </returns> 733 protected virtual string GetOnClientChanged() 734 { 735 return null; 736 } 737 738 /// <summary> 739 /// 有効なポストされたファイルかどうかを返します。 740 /// </summary> 741 /// <param name="postedFile"><see cref="HttpPostedFile"/>。</param> 742 /// <returns> 743 /// 有効な場合は <see langword="true"/>。 744 /// それ以外の場合は <see langword="false"/>。 745 /// </returns> 746 private static bool IsValidPostedFile(HttpPostedFile postedFile) 747 { 748 return postedFile != null 749 && (!string.IsNullOrEmpty(postedFile.FileName) || postedFile.ContentLength > 0); 750 } 751 752 /// <summary> 753 /// 有効なポストされたファイルかどうかを返します。 754 /// </summary> 755 /// <param name="postedFiles"><see cref="HttpPostedFile"/> のリスト。</param> 756 /// <returns> 757 /// 有効な場合は <see langword="true"/>。 758 /// それ以外の場合は <see langword="false"/>。 759 /// </returns> 760 private static bool IsValidPostedFiles(IList<HttpPostedFile> postedFiles) 761 { 762 if (postedFiles == null) 763 { 764 return false; 765 } 766 767 // おそらく、ポストバックではない場合 768 if (postedFiles.Count == 0) 769 { 770 return true; 771 } 772 773 // 実際は未指定 (ポストされなかった場合) だった場合でも、一つデータが存在する 774 if (postedFiles.Count == 1 && !IsValidPostedFile(postedFiles[0])) 775 { 776 return false; 777 } 778 779 return true; 780 } 781 782 /// <summary> 783 /// ポストされたファイルが保持されていない場合に保持します。 784 /// </summary> 785 /// <returns> 786 /// 保持するデータがある場合は <see langword="true"/>。 787 /// それ以外の場合は <see langword="false"/>。 788 /// </returns> 789 private bool EnsurePostedFileCache() 790 { 791 // クリアされていれば保持しない 792 if (clearFiles) 793 { 794 return false; 795 } 796 797 // 保持する設定になっていない場合 798 if (!CachePostedFile) 799 { 800 return false; 801 } 802 803 // ポストバック時ではない場合は保持しない (そもそもアップロードファイルが無い) 804 Page page = Page; 805 if (page != null && !page.IsPostBack) 806 { 807 return false; 808 } 809 810 // 既に保持するデータを準備済の場合 811 if (cachedPostedFiles != null) 812 { 813 return true; 814 } 815 816 UpdatePostedFileCache(); 817 return cachedPostedFiles != null; 818 } 819 820 /// <summary> 821 /// ポストされたファイルのキャッシュ情報を更新します。 822 /// </summary> 823 private void UpdatePostedFileCache() 824 { 825 cachedPostedFiles = CachedPostedFileCollection.CreateFrom(base.PostedFiles); 826 } 827 828 829 830 /// <summary> 831 /// アップロードされたファイルの保存情報を保持するクラスです。 832 /// </summary> 833 [Serializable] 834 [DebuggerDisplay(@"\{FileName = {fileName}\}")] 835 private sealed class CachedPostedFile 836 { 837 /// <summary> 838 /// ファイル名。 839 /// </summary> 840 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 841 private readonly string fileName; 842 843 /// <summary> 844 /// MIME コンテンツタイプ。 845 /// </summary> 846 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 847 private readonly string contentType; 848 849 /// <summary> 850 /// ファイルの内容を表すバイト配列。 851 /// </summary> 852 /// <remarks> 853 /// ファイルが空の場合は <see langword="null"/>。 854 /// </remarks> 855 [DebuggerBrowsable(DebuggerBrowsableState.Never)] 856 private readonly byte[] contents; 857 858 859 /// <summary> 860 /// インスタンスを作成します。 861 /// </summary> 862 /// <param name="postedFile">ポストされたファイル。</param> 863 internal CachedPostedFile(HttpPostedFile postedFile) 864 { 865 fileName = Path.GetFileName(postedFile.FileName); 866 contentType = postedFile.ContentType; 867 contents = Reflections.HttpInputStream.GetAsByteArray(postedFile.InputStream); 868 } 869 870 871 /// <summary> 872 /// ファイル名を取得します。 873 /// </summary> 874 /// <value> 875 /// ファイル名。 876 /// </value> 877 internal string FileName 878 { 879 get 880 { 881 return fileName; 882 } 883 } 884 885 /// <summary> 886 /// MIME コンテンツタイプを取得します。 887 /// </summary> 888 /// <value> 889 /// MIME コンテンツタイプ。 890 /// </value> 891 internal string ContentType 892 { 893 get 894 { 895 return contentType; 896 } 897 } 898 899 /// <summary> 900 /// ファイルの内容を表すバイト配列を取得します。 901 /// </summary> 902 /// <value> 903 /// ファイルの内容を表すバイト配列。 904 /// ファイルが空の場合は <see langword="null"/>。 905 /// </value> 906 internal byte[] Contents 907 { 908 get 909 { 910 return contents; 911 } 912 } 913 } 914 915 916 917 /// <summary> 918 /// アップロードされたファイルの保存情報を保持するクラスです。 919 /// </summary> 920 [DebuggerDisplay(@"Count = {Count}")] 921 private sealed class CachedPostedFileCollection : 922 Collection<CachedPostedFile> 923 { 924 /// <summary> 925 /// このコレクションの要素を元に作成された <see cref="HttpPostedFile"/> の読み取り専用のリスト。 926 /// </summary> 927 private IList<HttpPostedFile> postedFiles; 928 929 930 /// <summary> 931 /// インスタンスを作成します。 932 /// </summary> 933 /// <param name="list"><see cref="FileUpload.CachePostedFile"/> の配列。</param> 934 private CachedPostedFileCollection(CachedPostedFile[] list) 935 : base(list) 936 { 937 Debug.Assert(list.Length > 0, "Invalid count"); 938 } 939 940 941 /// <summary> 942 /// 格納されたファイルを取得します。 943 /// </summary> 944 /// <value> 945 /// 格納されたファイル。 946 /// </value> 947 internal HttpPostedFile PostedFile 948 { 949 get 950 { 951 return PostedFiles[0]; 952 } 953 } 954 955 /// <summary> 956 /// 格納されたファイルのコレクションを取得します。 957 /// </summary> 958 /// <value> 959 /// 格納されたファイルのコレクション。 960 /// </value> 961 internal IList<HttpPostedFile> PostedFiles 962 { 963 get 964 { 965 if (postedFiles == null) 966 { 967 HttpPostedFile[] newPostedFiles = new HttpPostedFile[Count]; 968 for (int i = 0; i < Count; i++) 969 { 970 CachedPostedFile cachedPostedFile = this[i]; 971 972 // 長さが 0 のファイルの場合は Contents が null 973 byte[] contents = cachedPostedFile.Contents; 974 975 newPostedFiles[i] 976 = Reflections.HttpPostedFile.CreateInstance( 977 cachedPostedFile.FileName, 978 cachedPostedFile.ContentType, 979 Reflections.HttpInputStream.CreateInstance( 980 contents != null 981 ? Reflections.HttpRawUploadedContent.CreateInstance(contents) 982 : null, 983 0, 984 contents != null 985 ? contents.Length 986 : 0)); 987 } 988 989 postedFiles = Array.AsReadOnly(newPostedFiles); 990 } 991 992 return postedFiles; 993 } 994 } 995 996 /// <summary> 997 /// ポストされたファイルのリストからインスタンスを作成して返します。 998 /// </summary> 999 /// <param name="postedFiles">ポストされたファイルのリスト。</param> 1000 /// <returns> 1001 /// キャッシュするデータのコレクション。 1002 /// 有効なポストされたファイルが無い場合は <see langword="null"/>。 1003 /// </returns> 1004 internal static CachedPostedFileCollection CreateFrom(IList<HttpPostedFile> postedFiles) 1005 { 1006 if (postedFiles == null || postedFiles.Count == 0 || !IsValidPostedFiles(postedFiles)) 1007 { 1008 return null; 1009 } 1010 1011 CachedPostedFile[] cachedPostedFiles = new CachedPostedFile[postedFiles.Count]; 1012 for (int i = 0; i < postedFiles.Count; i++) 1013 { 1014 cachedPostedFiles[i] = new CachedPostedFile(postedFiles[i]); 1015 } 1016 1017 return new CachedPostedFileCollection(cachedPostedFiles); 1018 } 1019 1020 /// <summary> 1021 /// ビューステートに保存したデータからインスタンスを作成します。 1022 /// </summary> 1023 /// <param name="viewState">ビューステート。</param> 1024 /// <returns> 1025 /// <paramref name="viewState"/> を元に作成したインスタンス。 1026 /// </returns> 1027 internal static CachedPostedFileCollection CreateFromViewState(object viewState) 1028 { 1029 return new CachedPostedFileCollection((CachedPostedFile[])viewState); 1030 } 1031 1032 /// <summary> 1033 /// ビューステートに保存するデータを取得します。 1034 /// </summary> 1035 /// <returns> 1036 /// ビューステートに保存するデータ。 1037 /// </returns> 1038 internal object ToViewState() 1039 { 1040 // 実体は配列 (コンストラクタで渡した配列) 1041 return Items; 1042 } 1043 } 405 1044 } 406 1045 } -
framework/trunk/WebTest/Sources/ReflectionsTest.cs
r1624 r1639 20 20 // </license> 21 21 // ---------------------------------------------------------------------------- 22 // ReSharper disable ExceptionNotDocumented 22 23 namespace FCSoft.SilverFrost.Framework.Web 23 24 { … … 84 85 85 86 /// <summary> 87 /// <see cref="Reflections.HttpRawUploadedContent"/> が使用出来るかのテストです。 88 /// </summary> 89 [Test] 90 public void TestHttpRawUploadedContentIsValid() 91 { 92 Assert.That(Reflections.HttpRawUploadedContent.IsValid, Is.True); 93 } 94 95 /// <summary> 96 /// <see cref="Reflections.HttpRawUploadedContent"/> のインスタンスが作成できるかのテストです。 97 /// </summary> 98 [Test] 99 public void TestHttpRawUploadedContentCreateInstance() 100 { 101 Assert.That(Reflections.HttpRawUploadedContent.CreateInstance(new[] { (byte)1, (byte)2, }), Is.Not.Null); 102 } 103 104 105 /// <summary> 106 /// <see cref="Reflections.HttpInputStream"/> が使用出来るかのテストです。 107 /// </summary> 108 [Test] 109 public void TestHttpInputStreamIsValid() 110 { 111 Assert.That(Reflections.HttpInputStream.IsValid, Is.True); 112 } 113 114 /// <summary> 115 /// <see cref="Reflections.HttpInputStream"/> のインスタンスが作成できるかのテストです。 116 /// </summary> 117 [Test] 118 public void TestHttpInputStreamCreateInstance() 119 { 120 Assert.That( 121 Reflections.HttpInputStream.CreateInstance( 122 Reflections.HttpRawUploadedContent.CreateInstance(new[] { (byte)1, (byte)2, }), 123 0, 124 2), 125 Is.Not.Null); 126 } 127 128 /// <summary> 129 /// <see cref="Reflections.HttpInputStream"/> のデータが空のインスタンスが作成できるかのテストです。 130 /// </summary> 131 [Test] 132 public void TestHttpInputStreamCreateInstanceForEmpty() 133 { 134 Assert.That( 135 Reflections.HttpInputStream.CreateInstance( 136 Reflections.HttpRawUploadedContent.CreateInstance(new byte[0]), 137 0, 138 0), 139 Is.Not.Null); 140 } 141 142 /// <summary> 143 /// <see cref="Reflections.HttpInputStream"/> のデータが <see langword="null"/> のインスタンスが作成できるかのテストです。 144 /// </summary> 145 [Test] 146 public void TestHttpInputStreamCreateInstanceForNullContents() 147 { 148 Assert.That( 149 Reflections.HttpInputStream.CreateInstance( 150 null, 151 0, 152 0), 153 Is.Not.Null); 154 } 155 156 /// <summary> 157 /// <see cref="Reflections.HttpInputStream.GetAsByteArray"/> のテストです。 158 /// </summary> 159 [Test] 160 public void TestHttpInputStreamGetAsByteArray() 161 { 162 object obj 163 = Reflections.HttpInputStream.CreateInstance( 164 Reflections.HttpRawUploadedContent.CreateInstance(new[] { (byte)1, (byte)2, }), 165 0, 166 2); 167 Assert.That(obj, Is.Not.Null, "CreateInstance"); 168 byte[] data = Reflections.HttpInputStream.GetAsByteArray(obj); 169 Assert.That(data, Is.EqualTo(new[] { (byte)1, (byte)2, }), "GetAsByteArray"); 170 } 171 172 /// <summary> 173 /// <see cref="Reflections.HttpInputStream.GetAsByteArray"/> のデータが空のテストです。 174 /// </summary> 175 [Test] 176 public void TestHttpInputStreamGetAsByteArrayForEmpty() 177 { 178 object obj 179 = Reflections.HttpInputStream.CreateInstance( 180 Reflections.HttpRawUploadedContent.CreateInstance(new byte[0]), 181 0, 182 0); 183 Assert.That(obj, Is.Not.Null, "CreateInstance"); 184 byte[] data = Reflections.HttpInputStream.GetAsByteArray(obj); 185 Assert.That(data, Is.Null, "GetAsByteArray"); 186 } 187 188 /// <summary> 189 /// <see cref="Reflections.HttpInputStream.GetAsByteArray"/> のデータが <see langword="null"/> のテストです。 190 /// </summary> 191 [Test] 192 public void TestHttpInputStreamGetAsByteArrayForNullContents() 193 { 194 object obj 195 = Reflections.HttpInputStream.CreateInstance( 196 null, 197 0, 198 0); 199 Assert.That(obj, Is.Not.Null, "CreateInstance"); 200 byte[] data = Reflections.HttpInputStream.GetAsByteArray(obj); 201 Assert.That(data, Is.Null, "GetAsByteArray"); 202 } 203 204 205 /// <summary> 206 /// <see cref="Reflections.HttpPostedFile"/> が使用出来るかのテストです。 207 /// </summary> 208 [Test] 209 public void TestHttpPostedFileIsValid() 210 { 211 Assert.That(Reflections.HttpPostedFile.IsValid, Is.True); 212 } 213 214 /// <summary> 215 /// <see cref="Reflections.HttpPostedFile"/> のインスタンスが作成できるかのテストです。 216 /// </summary> 217 [Test] 218 public void TestHttpPostedFileCreateInstance() 219 { 220 Assert.That( 221 Reflections.HttpPostedFile.CreateInstance( 222 "file.txt", 223 "text/plain", 224 Reflections.HttpInputStream.CreateInstance( 225 Reflections.HttpRawUploadedContent.CreateInstance(new[] { (byte)1, (byte)2, }), 226 0, 227 2)), 228 Is.Not.Null); 229 } 230 231 /// <summary> 232 /// <see cref="Reflections.HttpPostedFile"/> で作成したインスタンスの動作が正しいかのテストです。 233 /// </summary> 234 [Test] 235 public void TestHttpPostedFileBehaviors() 236 { 237 const string FileName = "file.txt"; 238 const string ContentType = "text/plain"; 239 240 HttpPostedFile httpPostedFile 241 = Reflections.HttpPostedFile.CreateInstance( 242 FileName, 243 ContentType, 244 Reflections.HttpInputStream.CreateInstance( 245 Reflections.HttpRawUploadedContent.CreateInstance(new[] { (byte)1, (byte)2, }), 246 0, 247 2)); 248 Assert.That(httpPostedFile, Is.Not.Null, "CreateInstance"); 249 Assert.That(httpPostedFile.FileName, Is.EqualTo(FileName), "FileName"); 250 Assert.That(httpPostedFile.ContentType, Is.EqualTo(ContentType), "ContentType"); 251 Assert.That(httpPostedFile.ContentLength, Is.EqualTo(2), "ContentLength"); 252 Assert.That(httpPostedFile.InputStream.Length, Is.EqualTo(2), "InputStream.Length"); 253 Assert.That(httpPostedFile.InputStream.Position, Is.EqualTo(0), "InputStream.Position:1"); 254 Assert.That(httpPostedFile.InputStream.ReadByte(), Is.EqualTo(1), "InputStream.Read:1"); 255 Assert.That(httpPostedFile.InputStream.Position, Is.EqualTo(1), "InputStream.Position:2"); 256 Assert.That(httpPostedFile.InputStream.ReadByte(), Is.EqualTo(2), "InputStream.Read:2"); 257 Assert.That(httpPostedFile.InputStream.Position, Is.EqualTo(2), "InputStream.Position:3"); 258 Assert.That(httpPostedFile.InputStream.ReadByte(), Is.EqualTo(-1), "InputStream.Read:3"); 259 } 260 261 262 /// <summary> 86 263 /// <see cref="Reflections.FormsAuthentication.GetCookieSameSite()"/> のテストです。 87 264 /// </summary> … … 130 307 } 131 308 309 132 310 /// <summary> 133 311 /// <see cref="Reflections.WebControl"/> が使用出来るかのテストです。 … … 140 318 141 319 /// <summary> 142 /// <see cref="Reflections. Control"/> の <c>disabledDirty</c> へアクセスするテストです。320 /// <see cref="Reflections.WebControl"/> の <c>disabledDirty</c> へアクセスするテストです。 143 321 /// </summary> 144 322 [Test] … … 162 340 Reflections.WebControl.SetWebControlFlags(control, Bit); 163 341 } 342 164 343 165 344 /// <summary> … … 188 367 } 189 368 369 190 370 /// <summary> 191 371 /// <see cref="Reflections.ScriptManager"/> が使用出来るかのテストです。 … … 197 377 } 198 378 379 199 380 /// <summary> 200 381 /// <see cref="Reflections.PageRequestManager"/> が使用出来るかのテストです。 … … 205 386 Assert.That(Reflections.PageRequestManager.IsValid, Is.True); 206 387 } 388 207 389 208 390 /// <summary> … … 233 415 } 234 416 417 235 418 /// <summary> 236 419 /// <see cref="Reflections.RadioButtonList"/> が使用出来るかのテストです。
※ 詳しい使い方は
TracChangeset を参照してください。