
Uploading a file with asp.net, jQuery and jTemplate
Playing around with jQuery and jTemplate and I had the following problem: On a page created with jTemplate I could not use asp:FileUpload Control. Additionally it would of course be better to have an Ajax / jQuery control as this would better integrate into a jQuery website. There are several jQuery Fileupload controls, and Ajax-Upload is my favorite, e.g. because it allows multiple fileupload and does not require Flash. Andrew Valums, the creator of the Ajax-Upload, has posted a C#-Example but as it’s just posted in the comments it might be missed easily. Additionally I needed it for Visual Basic so I’ve transfered it and wrote this short blog entry.
First follow the instructions at Ajax-Upload page to setup your page. I use the following JavaScript-Code within my function
var uploader = new qq.FileUploader({ element: document.getElementById('file-uploader'), action: 'MyWebservice.asmx/ProcessFile', debug: false, sizeLimit: 1100000, // max size 1 MB allowedExtensions: ['txt'] });
In the webservice I then use the following code. The code is shortened to the basics, of course you should add a check whether the filename already exists etc. but it should only demonstrate how to save the uploaded file.
Dim Filename As String = "c:\temp\upload.txt" 'get reference to posted file and do what you want with this file If Me.Context.Request.Files.Count = 0 Then 'Firefox does not upload it as file Dim Length As Integer = 4096 Dim BytesRead As Integer = 0 Dim buffer As [Byte]() = New [Byte](Length) {} Try Using fileStream As New IO.FileStream(ImportPath & Filename, IO.FileMode.Create) Do BytesRead = Context.Request.InputStream.Read(buffer, 0, Length) fileStream.Write(buffer, 0, BytesRead) Loop While BytesRead > 0 End Using Catch ex As UnauthorizedAccessException ' log error hinting to set the write permission of ASPNET or the identity accessing the code End Try Else Dim postedfile As HttpPostedFile postedfile = TryCast(Me.Context.Request.Files.[Get](0), HttpPostedFile) postedfile.SaveAs(Filename) End If