This question is locked. New answers and comments are not allowed.
Hi
I would like to develop a module allowing admins to upload a zip file and extract the contents, in a similar way to the Sitefinity image/document library upload functionality. Is this zip & extract functionality available via an API, and are there any examples or documentation?
A zip file will contain a Silverlight app and various media/resources referenced by that app (a zip may be 50Mb+ and contain hundreds of files and folders). Am I right in saying it wouldn't be practical to extract the zip to a Sitefinity library because the Silverlight app couldn't easily reference the files, also performance issues due to size and numbers? Would a better approach be to extract to the file system, and is this possible through the Sitefinity zip/extract API?
Thanks in advance
Andy
I would like to develop a module allowing admins to upload a zip file and extract the contents, in a similar way to the Sitefinity image/document library upload functionality. Is this zip & extract functionality available via an API, and are there any examples or documentation?
A zip file will contain a Silverlight app and various media/resources referenced by that app (a zip may be 50Mb+ and contain hundreds of files and folders). Am I right in saying it wouldn't be practical to extract the zip to a Sitefinity library because the Silverlight app couldn't easily reference the files, also performance issues due to size and numbers? Would a better approach be to extract to the file system, and is this possible through the Sitefinity zip/extract API?
Thanks in advance
Andy
7 Answers, 1 is accepted
0
Hello Andrew,
You could upload Silverlight files to images and documents library of custom type where you do not have restriction about the extension of a file, but most probably the application will not work. The best way at this stage is uploading the application somewhere in your project - say in a root folder called SilverlightApplications.
Is this zip & extract functionality available via an API, and are there any examples or documentation?
Below is a sample code that illustrates using of ZipManager class.
All the best,
Ivan Dimitrov
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
You could upload Silverlight files to images and documents library of custom type where you do not have restriction about the extension of a file, but most probably the application will not work. The best way at this stage is uploading the application somewhere in your project - say in a root folder called SilverlightApplications.
Is this zip & extract functionality available via an API, and are there any examples or documentation?
Below is a sample code that illustrates using of ZipManager class.
private void UploadFiles(ILibrary library) { foreach (UploadedFile file in RadUploadControl.UploadedFiles) { ZipManager zipManager = new ZipManager(); IZipArchive zipArchive = zipManager.GetZipArchive(file.InputStream); IAbstractFile[] archive = zipArchive.GetFiles(true); long filesSize = 0; if (library.MaxSize > 0) { foreach (IAbstractFile item in archive) { filesSize += item.Size; if (filesSize > library.MaxSize) { HttpContext.Current.Response.Write("FILE SIZE PROBLEM"); return; } } } int i = -1; foreach (IAbstractFile item in archive) { i++; double percentIncrement = 100 / (double)archive.Length; progress["PrimaryTotal"] = archive.Length.ToString(); if (i != 0) progress["PrimaryPercent"] = ((int)(i * percentIncrement)).ToString(); progress["PrimaryValue"] = (i + 1).ToString(); string extension = String.Empty; string name; string itemName = item.FullName.Substring(item.RootFolder.FullName.Length - 1); if (item.Name.LastIndexOf(".") != -1) { extension = item.Name.Substring(item.Name.LastIndexOf('.')); name = item.Name.Remove(item.Name.LastIndexOf(".")); } else name = item.Name; Stream str = item.OpenRead(); byte[] buffer = new byte[item.Size]; long position = 0; int currentByte = str.ReadByte(); while (currentByte != -1) { buffer[position++] = (byte)currentByte; currentByte = str.ReadByte(); } try { this.manager = new LibraryManager(); // JUST FOR THE SAMPLE //ILibrary lib = manager.GetLibrary("silverlight"); //or set it from the parameter. itemId = manager.UploadFile(buffer, name, extension, MimeMapper.GetMimeMapping(item.Name), item.Size, library).ID; uploadedFileIDs.Add(itemId.ToString()); } catch (ArgumentException) { FilesToUpload.Add(itemName, "NOT VALID"); continue; } catch (Exception) { FilesToUpload.Add(itemName, "UNKNOWN"); continue; } if (itemId != Guid.Empty) FilesToUpload.Add(itemId.ToString(), "SUCCESSFULL"); else FilesToUpload.Add(itemName, "UNKNOWN"); } } foreach (UploadedFile file in RadUploadControl.InvalidFiles) { if (!file.GetExtension().Equals(".zip", StringComparison.OrdinalIgnoreCase)) { HttpContext.Current.Response.Write("NOT VALID EXTENSION"); return; } } } private LibraryManager manager; private List<string> uploadedFileIDs = new List<string>(); private Guid itemId; // just for the the sample private RadUpload RadUploadControl;All the best,
Ivan Dimitrov
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Andrew
Top achievements
Rank 1
answered on 13 Oct 2009, 01:48 PM
Hi
Thanks for the response. With your help I've created a user control that allows a user to upload a zip then unzip it to a folder. The user control contains a RadProgressArea, RadUpload and a button to start the upload/unzip operation. Just a couple of minor issues now, if you could assist please:-
1) The RadProgressArea control is used to display progress during the file upload, and then during the unzip process (custom progress similar to your above code sample). Before the unzipping begins I want to change the progress area's Uploaded label to something more appropriate, e.g. "Unzipped:", so in my button click event I'm doing this:
However the label never changes. Am I missing something? Is it something to do with AJAX/partial postbacks not updating the UI?
2) On the RadProgressArea I have DisplayCancelButton=true. Do I need to handle any kind of cancel event or will the Cancel button stop any current operation itself (either a file upload or unzipping)? (It's just that I've noticed after clicking Cancel that the w3wp memory usage stays high, so I don't know if it is carrying on with the unzipping, or it's just the GC kicking in).
Thanks again
Andy
Thanks for the response. With your help I've created a user control that allows a user to upload a zip then unzip it to a folder. The user control contains a RadProgressArea, RadUpload and a button to start the upload/unzip operation. Just a couple of minor issues now, if you could assist please:-
1) The RadProgressArea control is used to display progress during the file upload, and then during the unzip process (custom progress similar to your above code sample). Before the unzipping begins I want to change the progress area's Uploaded label to something more appropriate, e.g. "Unzipped:", so in my button click event I'm doing this:
| UploadedFile f = RadUploadContext.Current.UploadedFiles[0]; |
| RadProgressArea1.Localization.Uploaded = "Unzipped: "; |
| UnzipFiles(f); |
However the label never changes. Am I missing something? Is it something to do with AJAX/partial postbacks not updating the UI?
2) On the RadProgressArea I have DisplayCancelButton=true. Do I need to handle any kind of cancel event or will the Cancel button stop any current operation itself (either a file upload or unzipping)? (It's just that I've noticed after clicking Cancel that the w3wp memory usage stays high, so I don't know if it is carrying on with the unzipping, or it's just the GC kicking in).
Thanks again
Andy
0
Hi Andrew,
Below is a sample implementation of the desired functionality
You can modify the code and integrate it with the previous solution I sent.
Sincerely yours,
Ivan Dimitrov
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Below is a sample implementation of the desired functionality
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) { RadProgressArea1.Localization.UploadedFiles = "Unzipped: "; } Button1.Click += new EventHandler(Button1_Click); } void Button1_Click(object sender, EventArgs e) { Telerik.Web.UI.RadProgressContext ProgressContex = Telerik.Web.UI.RadProgressContext.Current; ProgressContex.SecondaryTotal = "100"; for (int i = 1; i < 100; i++) { ProgressContex.CurrentOperationText = "Uploading zip file percentage " + i.ToString();
// FORCE STOP UPLOADING
if (!Response.IsClientConnected) { break; } // SIMULATE TIME UPLOADING System.Threading.Thread.Sleep(100); } }<telerik:RadUpload id="RadUpload1" runat="server" OverwriteExistingFiles ="true"TargetFolder="~/Files" /><telerik:RadProgressManager ID="RadProgressManager1" runat="server" /><telerik:RadProgressArea ID="RadProgressArea1" runat="server" DisplayCancelButton="True" ProgressIndicators="FilesCountBar, FilesCount, FilesCountPercent, SelectedFilesCount, CurrentFileName, TimeElapsed, TimeEstimated"></telerik:RadProgressArea><asp:Button ID="Button1" runat="server" Text="Unzip selected file" />You can modify the code and integrate it with the previous solution I sent.
Sincerely yours,
Ivan Dimitrov
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Andrew
Top achievements
Rank 1
answered on 13 Oct 2009, 02:38 PM
Hi
Thanks again for the quick reply.
I can also set the Localization properties in Page Load, but I need to do this in the button click event. I would like the text to be different during the file upload and during the unzipping, hence needing to do this in the button click event as per my earlier sample.
It's not a big deal if this isn't possible, as I'll just use more generic text such as "Processed:".
Thanks
Andy
Thanks again for the quick reply.
I can also set the Localization properties in Page Load, but I need to do this in the button click event. I would like the text to be different during the file upload and during the unzipping, hence needing to do this in the button click event as per my earlier sample.
It's not a big deal if this isn't possible, as I'll just use more generic text such as "Processed:".
Thanks
Andy
0
Hi Andrew,
You can modify the button click event as below.
you can use switch loop. Note that the page should be refreshed because on each upload the control generates RadUrid = "some guid here"
Regards,
Ivan Dimitrov
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
You can modify the button click event as below.
void Button1_Click(object sender, EventArgs e) { Telerik.Web.UI.RadProgressContext ProgressContex = Telerik.Web.UI.RadProgressContext.Current; ProgressContex.SecondaryTotal = "100"; for (int i = 1; i < 100; i++) { foreach(UploadedFile file in RadUpload1.UploadedFiles) { string ext = file.GetExtension(); if(ext == ".zip") { RadProgressArea1.Localization.UploadedFiles = "Unzipping: "; } else { RadProgressArea1.Localization.UploadedFiles = "Uploading: "; } ProgressContex.CurrentOperationText = "Uploading zip file percentage " + i.ToString(); // FORCE STOP UPLOADING if (!Response.IsClientConnected) { break; } // SIMULATE TIME UPLOADING System.Threading.Thread.Sleep(100); } } }you can use switch loop. Note that the page should be refreshed because on each upload the control generates RadUrid = "some guid here"
Regards,
Ivan Dimitrov
the Telerik team
Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Yusuf
Top achievements
Rank 1
answered on 21 Nov 2011, 10:07 AM
Hello Ivan
I need to do the same operation using Silverlight RADUpload control and RADUploadHandler. I need to first Extract Zip files and show within the RADUpload Listbox and only upload the extracted files rather than the zip file to the Server location. I am able to extract the files using the code given in this link but cannot add it to the RADUpload listboxitem control.
http://www.sharpgis.net/post/2009/04/22/REALLY-small-unzip-utility-for-Silverlight.aspx
Any help on this regards would be much appreciated.
Thanks & Regards
Yusuf Shabbir
I need to do the same operation using Silverlight RADUpload control and RADUploadHandler. I need to first Extract Zip files and show within the RADUpload Listbox and only upload the extracted files rather than the zip file to the Server location. I am able to extract the files using the code given in this link but cannot add it to the RADUpload listboxitem control.
http://www.sharpgis.net/post/2009/04/22/REALLY-small-unzip-utility-for-Silverlight.aspx
Any help on this regards would be much appreciated.
Thanks & Regards
Yusuf Shabbir
0
Hello Yusuf,
Please have a look at this CodeLibrary solution and let us know if this is what you had in mind.
Regards,
Tina Stancheva
the Telerik team
Please have a look at this CodeLibrary solution and let us know if this is what you had in mind.
Regards,
Tina Stancheva
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>