воскресенье, 27 декабря 2009 г.

Flajaxian FileUploader

После долгих изысканий я наконец-то нашел достойный компонент для асинхронной закачки файлов на сервер в ASP.NET (в моем случае 2.0) - Flajaxian FileUploader.

Источник: http://flajaxianfileupload.codeplex.com/
Help: http://www.flajaxian.com/flajaxian.com/FileUploader2.0Help.html
Видео (англ.): http://blog.bodurov.com/how-to-use-flajaxian-fileuploader-video-basics

В моем примере представлен собственно сам компонент загрузки файлов на сервер, в данном случае графических файлов. Контроль Image, показывающий уже загруженое изображение, и скрытая кнопка. Все это находится внутри Update Panel. После того как файл загружен эмулируется нажатие на скрытую кнопку и происходит обновление контрола Image и мы тут же видим только что загруженное изображение.
Код расположенный на моей aspx странице:

  1. <fieldset>
  2. <legend class="legend" onclick="slideBlock('blockBOLogo');">Reseller logo for Back End (please ensure your logo size is 415x70 pixels only)legend>
  3. <div id="blockBOLogo" class="blockLogo">
  4. <asp:ScriptManager ID="ScriptManager1" runat="server">
  5. asp:ScriptManager>
  6. <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
  7. <ContentTemplate>

  8. <asp:Image ID="imgBOLogo" runat="server" CssClass="imageResellerLogoBO"/>
  9. <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" style="display:none;"/>
  10. <br/><br/>
  11. <fjx:FileUploader ID="FileUploader1" runat="server"
  12. UseInsideUpdatePanel="true"
  13. RequestAsPostBack="true"
  14. OnFileReceived="FileUploader1_FileReceived"
  15. PageUrl="~/ResellerEdit.aspx?proj=HOTEL&id_reseller=2"
  16. SuppressQueryStringParametersOnUploadUrl="false"

  17. JsFunc_FileStateChanged="fn_fileStateChanged"

  18. CssUrl="~/Control/Style/FileUploader.css"
  19. TransparentBackground="true"
  20. ImagesPath="~/Control/Image/Uploader/"
  21. BrowseButtonUrl="Browse.gif"
  22. BrowseButtonOverUrl="BrowseOver.gif"
  23. BrowseButtonPressedUrl="BrowseOver.gif"
  24. BrowseButtonDisabledUrl="Browse.gif"
  25. UploadButtonUrl="Upload.gif"
  26. UploadButtonOverUrl="UploadOver.gif"
  27. UploadButtonPressedUrl="UploadOver.gif"
  28. UploadButtonDisabledUrl="Upload.gif"
  29. CancelButtonUrl="Cancel.gif"
  30. CancelButtonOverUrl="CancelOver.gif"
  31. CancelButtonPressedUrl="Cancel.gif"

  32. ProgressBorderSize="0"
  33. ProgressBorderColor="#fff1dd"
  34. ProgressBackUrl="ProgressBackground.gif"
  35. ProgressForeUrl="ProgressFore.gif"

  36. MaxNumberFiles="1" MaxFileNumberReachedMessage="You can select only up to {0} files in one queue"
  37. MaxFileSize="2MB" MaxFileSizeReachedMessage="No files bigger than {0} are allowed"
  38. AllowedFileTypes="Web Images (Jpeg, Gig, Png):*.jpg;*.jpeg;*.png;*.gif"

  39. >
  40. <Adapters>
  41. <fjx:ThumbGeneratorAdapter Runat="server"
  42. Extensions="jpg;jpeg;gif;png;bmp" FolderName="/Control/Upload"
  43. Suffix="_thumb" MaximumWidth="200" MaximumHeight="200" />

  44. <fjx:FileSaverAdapter Runat="server" FolderName="/Control/Upload" />

  45. Adapters>
  46. fjx:FileUploader>

  47. ContentTemplate>
  48. asp:UpdatePanel>
  49. div>
  50. fieldset>
  51. <script type="text/javascript">
  52. function fn_fileStateChanged(uploader, file, httpStatus, isLast) {
  53. Flajaxian.fileStateChanged(uploader, file, httpStatus, isLast);
  54. if (file.state > Flajaxian.File_Uploading) {
  55. document.getElementById("<%= Button1.ClientID %>").click();
  56. }
  57. }
  58. script>
* This source code was highlighted with Source Code Highlighter.

Адаптер "fjx:FileSaverAdapter" (строчка 51) отвечает за сохранение фалов на диск, если вы планируете сохранять загружаемый файл сразу в базу (смотри пример ниже), то можете просто удалить строчку "fjx:FileSaverAdapter".

Адаптер "fjx:ThumbGeneratorAdapter" очень интересен. Он налету создает превьюшки загружаемых графических файлов.


Вот пример серверных методов подвешенных на события выше приведенного кода:

  1. protected void FileUploader1_FileReceived(object sender, com.flajaxian.FileReceivedEventArgs e)
  2. {
  3. curProject = Utils.getParamString(Global.ManagementArgumnet.Project);

  4. curId = Utils.getParamInt(Global.ManagementArgumnet.ResellerId);

  5. int maxSizeAllowed = 2000000;
  6. int contentLenght = e.File.ContentLength;
  7. if (contentLenght <>
  8. {
  9. Stream stream = (Stream)e.File.InputStream;

  10. if (stream != null)
  11. {
  12. Reseller.TrySaveImage(curProject, curId, Library.ImageType.ResellerLogoBO, stream, contentLenght);

  13. }
  14. }
  15. }

  16. protected void Button1_Click(object sender, EventArgs e)
  17. {
  18. int rand = new Random().Next(0, 100000);

  19. imgBOLogo.ImageUrl = imgBOLogo.ImageUrl + "&random=" + rand;
  20. imgBOLogo.Visible = true;
  21. imgBOLogo.DataBind();

  22. UpdatePanel1.Update();
  23. }
* This source code was highlighted with Source Code Highlighter.

Комментариев нет:

Отправить комментарий