Hi, is there a way to load the AsyncUpload control with a list of files?
Your sample http://demos.telerik.com/aspnet-ajax/asyncupload/examples/overview/defaultcs.aspx is ok for a new mail, but when you forward a mail you should keep the attachments..
Your sample http://demos.telerik.com/aspnet-ajax/asyncupload/examples/overview/defaultcs.aspx is ok for a new mail, but when you forward a mail you should keep the attachments..
7 Answers, 1 is accepted
0
Hello Max,
Plamen
the Telerik team
Such behavior can not be achieved because of browser security limitations that does not allow it.
Plamen
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
max
Top achievements
Rank 1
answered on 15 Jan 2013, 08:59 AM
Even uploading the files server-side and filling the client state with the correct values?
The client state it's simply a json with a base64 data...
The client state it's simply a json with a base64 data...
0
Hi,
Plamen
the Telerik team
We are not aware of a current workaround for the issue but if you in your further examinations succeed in achieving this please let us know of the exact way to do it so we could help other users as well.
Plamen
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
max
Top achievements
Rank 1
answered on 16 Jan 2013, 10:59 AM
Public Class AsyncUpload Inherits Telerik.Web.UI.RadAsyncUpload Public Property ClientState As String Private hfClientState As New HiddenField Public Sub addFilesFromFolder(folder As String) Dim tempClientState As String = "{""isEnabled"":""true"", ""uploadedFiles"": [" Dim di As New System.IO.DirectoryInfo(folder) Dim i As Integer = 0 For Each fi In di.GetFiles() If fi.Name <> "RadUploadTestFile" Then Dim t As System.Reflection.Assembly = System.Reflection.Assembly.GetAssembly(GetType(Telerik.Web.UI.UploadedFileInfo)) Dim meta As String = "{""TempFileName"":""" + fi.Name + """,""AsyncUploadTypeName"":""Telerik.Web.UI.UploadedFileInfo, " + t.FullName + """}" meta = Convert.ToBase64String(Encoding.ASCII.GetBytes(meta)) Dim ct As String = MimeTypeUtil.getMimeFromFile(fi.FullName) tempClientState += "{""fileInfo"":{""FileName"":""" + fi.Name + """,""ContentType"":""" + ct + """,""ContentLength"":" & fi.Length & ",""Index"":" & i & "},""metaData"":""" + meta + """}," i += 1 End If Next tempClientState += "]}" tempClientState = tempClientState.Replace("},]", "}]") Me.ClientState = tempClientState End Sub Public Overrides Sub RenderClientStateField(writer As HtmlTextWriter) If Not String.IsNullOrEmpty(ClientState) Then hfClientState.ID = Me.ClientID + "_ClientState" hfClientState.Value = ClientState hfClientState.RenderControl(writer) Else MyBase.RenderClientStateField(writer) End If End SubEnd ClassI wrore this test class
Assumed folder is the same as AsyncUpload.TemporaryFolder
The files list is loaded correctly but the postback fail with this exception:
Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. Telerik.Web.UI.WebResource.axd:15
0
max
Top achievements
Rank 1
answered on 24 Jan 2013, 10:14 AM
ok. this is the solution!
The code is bad written (RenderClientStateField might be buggy), but it's working
The code is bad written (RenderClientStateField might be buggy), but it's working
Public Class AsyncUpload Inherits Telerik.Web.UI.RadAsyncUpload Public Property forcedClientState As String Public Sub setTemporaryFolderAndLoadFiles(folder As String) Me.TemporaryFolder = folder Dim di As New System.IO.DirectoryInfo(folder) Dim i As Integer = 0 Dim uploadedFiles As New List(Of Object) Dim s As New JavaScriptSerializer For Each fi In di.GetFiles() Dim t As System.Reflection.Assembly = System.Reflection.Assembly.GetAssembly(GetType(Telerik.Web.UI.UploadedFileInfo)) Dim meta As String = "{""TempFileName"":""" + fi.Name + """,""AsyncUploadTypeName"":""Telerik.Web.UI.UploadedFileInfo, " + t.FullName + """}" Dim formatter As LosFormatter = New LosFormatter(True, "string") Dim output As New StringWriter formatter.Serialize(output, meta) meta = output.ToString Dim ct As String = MimeTypeUtil.getMimeFromFile(fi.FullName) uploadedFiles.Add(New With {.fileInfo = New Telerik.Web.UI.UploadedFileInfo With {.FileName = fi.Name, _ .ContentType = ct, _ .ContentLength = fi.Length.ToString.ToLower, _ .Index = i.ToString}, _ .metaData = meta }) i += 1 Next Dim ss = s.Serialize(New With {.isEnabled = Me.IsEnabled.ToString, .uploadedFiles = uploadedFiles}) Me.forcedClientState = ss.Replace("""", """) End Sub Public Overrides Sub RenderClientStateField(writer As HtmlTextWriter) If Not String.IsNullOrEmpty(forcedClientState) Then Dim old As String = "" Using sw As New System.IO.StringWriter() Using w As New HtmlTextWriter(sw) MyBase.RenderClientStateField(w) End Using old = sw.ToString() End Using writer.Write(old.Replace("/>", "value=""" + forcedClientState + """ />")) Else MyBase.RenderClientStateField(writer) End If End SubEnd Class0
Hi Massimo,
Plamen
the Telerik team
Thank you for sharing the code with us.
Would you please provide the code for "MimeTypeUtil.getMimeFromFile" as well so we could be able to test it properly and share some feedback concerning it?
Plamen
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
0
max
Top achievements
Rank 1
answered on 29 Jan 2013, 09:36 AM
there are many ways to get the mime type, this is my code:
Imports System.Runtime.InteropServicesImports System.IOPublic Class MimeTypeUtil <DllImport("urlmon.dll", CharSet:=CharSet.Auto)> _ Private Shared Function FindMimeFromData(pBC As System.UInt32, <MarshalAs(UnmanagedType.LPStr)> pwzUrl As System.String, <MarshalAs(UnmanagedType.LPArray)> pBuffer As Byte(), cbSize As System.UInt32, <MarshalAs(UnmanagedType.LPStr)> pwzMimeProposed As System.String, dwMimeFlags As System.UInt32, _ ByRef ppwzMimeOut As System.UInt32, dwReserverd As System.UInt32) As System.UInt32 End Function Public Shared Function getMimeFromFile(filename As String) As String If Not File.Exists(filename) Then Throw New FileNotFoundException(filename & " not found") End If Dim buffer As Byte() = New Byte(255) {} Using fs As New FileStream(filename, FileMode.Open) If fs.Length >= 256 Then fs.Read(buffer, 0, 256) Else fs.Read(buffer, 0, CInt(fs.Length)) End If End Using Try Dim mimetype As System.UInt32 FindMimeFromData(0, Nothing, buffer, 256, Nothing, 0, _ mimetype, 0) Dim mimeTypePtr As System.IntPtr = New IntPtr(mimetype) Dim mime As String = Marshal.PtrToStringUni(mimeTypePtr) Marshal.FreeCoTaskMem(mimeTypePtr) Return mime Catch e As Exception Return "unknown/unknown" End Try End FunctionEnd Class