The following example is written in VB.NET. It is designed to use FileUp's HttpModule so that server performance will not be hindered by potentially large uploads.
The design of this user control will include the entire upload form. This is because <FORM> element must have the following attributes in order to be RFC-1867 compliant (which FileUp requires):
- ENCTYPE must be set to "MULTIPART/FORM-DATA"
- METHOD must be set to "POST". This does not need to be explicitly declared in a .NET form that runs server-side, as the METHOD attribute is automatically assumed to be "POST".
The form will also contain a button to trigger the postback necessary to send files to the server. The code that will instantiate FileUp is in the code-behind of the user-control.
- Create a VisualStudio.Net ASP.NET web project(VB) and name it "FileUpUserControl".
- Add FileUp (safileup.dll) and the FileUp HttpModule (FileUpModule.dll) as references to your Visual Studio.NET project. (Note: Since FileUp is a COM component, and not a pure .NET component, you must remember to add a reference to the same version of the dll that is registered on your server.)
- Set up your web.config/machine.config file for the use of FileUp's HttpModule, and set appropriate security on the directories to which FileUp will cache and save files. This KB article assumes familiarity with these topics, but should you need more information on the HttpModule and using FileUp in a .NET environment, please see the online FileUp documentation. Please see the "Installation Instructions" for configuring the HttpModule as well as the section on "Security Considerations" for setting appropriate security for caching and upload directories.
- Create the web form in the *.ascx page. This is the form that you use to select the file for uploading.
FileUpWebUserControl.ascx
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="FileUpWebUserControl.ascx.vb"
Inherits="FileUpUserControl.FileUpWebUserControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<FORM id="theForm" runat="server" ENCTYPE="multipart/form-data" >
<TABLE WIDTH="600" align="center">
<TR>
<TD ALIGN="right" VALIGN="top">Enter Filename:</TD>
<!-- Note: Notice this form element is of TYPE="FILE"-->
<TD ALIGN="left">
<INPUT TYPE="file" NAME="myFile"><BR>
<I>Click "Browse" to select a file to upload</I>
</TD>
</TR>
<TR>
<TD ALIGN="right"> </TD>
<TD ALIGN="left"><INPUT TYPE="button" id="UploadBtn"
runat="server" OnServerClick="UploadBtn_Click" VALUE="Upload File"
NAME="UploadBtn"></TD>
</TR>
<TR>
<TD colspan="2">
<HR noshade>
<B>Note:</B> This sample demonstrates how to perform a simple single file
upload with FileUp
</TD>
</TR>
</TABLE>
</FORM>
<ASP:LITERAL id="ltrUploadResults" runat="Server" />
- Instantiate FileUp in the code behind of the *.ascx page. FileUp will pare out the files from the POST request made by the web form.
FileUpWebUserControl.ascx.vb
Imports System
Imports SoftArtisans.Net
Public Class FileUpWebUserControl
Inherits System.Web.UI.UserControl
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents UploadBtn As System.Web.UI.HtmlControls.HtmlInputButton
'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
'--- Declare controls used on the webform
Protected theForm As System.Web.UI.HtmlControls.HtmlForm
Protected ltrUploadResults As System.Web.UI.WebControls.Literal
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Put user code to initialize the page here
End Sub
Protected Sub UploadBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
'--- Hide the form when the upload button is clicked
theForm.Visible = False
ProcessUpload()
End Sub
Private Sub ProcessUpload()
'--- Instantiate the FileUp object
Dim oFileUp As New FileUp(Context)
'--- This StringBuilder will be used to display results
Dim results As New System.Text.StringBuilder
Try
oFileUp.Path = "C:\Save Here"
'--- Check to be sure there was a file selected in the form
'--- If so, continue processing
'--- Get a reference to the uploaded file field
Dim oFile As SaFile = CType(oFileUp.Form("myFile"), SaFile)
If Not (oFile Is Nothing) Then
If Not (oFile.IsEmpty) Then
'--- Save the file
'--- Note: The Save() method saves the file
'--- with its original name to the directory
'--- you set as the Path property.
'--- To save a file to a different location
'--- or with a different name, use the SaveAs() method
'--- instead of Save()
oFile.Save()
'--- Display information about the saved file
results.Append("<H3>FileUp Saved the File Successfully</H3>")
results.Append("<DL>")
'--- ServerName is the full path of the file as it was saved on the server
results.Append("<DT><B>Path on server</B></DT><DD>" + oFile.ServerName + "</DD>")
'--- UserFilename is the full path of the file as it was sent from the client
results.Append("<DT><B>Path on client</B></DT><DD>" + oFile.UserFilename + "</DD>")
'--- ShortFileName is just the Userfilename without the path
results.Append("<DT><B>Short filename</B></DT><DD>" + oFile.ShortFilename + "</DD>")
'--- TotalBytes is the byte size of the file
results.Append("<DT><B>Byte size</B></DT><DD>" + oFile.TotalBytes.ToString() + "</DD>")
'--- ContentType is the mime type of the file. Eg, "application/msword"
results.Append("<DT><B>Content type</B></DT><DD>" + oFile.ContentType + "</DD>")
'--- CheckSum is the MD5 hash of the file that can be used to check file integrity
results.Append("<DT><B>CheckSum</B></DT><DD>" + oFile.Checksum + "</DD>")
results.Append("</DL>")
Else
'--- If SaFile.IsEmpty is true, the file field was left empty
results.Append("There was no file submitted in the form field.")
End If
Else
results.Append("The referenced field does not exist or is not of type=""file""")
End If
'--- Display the results on the webform
ltrUploadResults.Text = results.ToString()
Catch ex As System.Exception
'--- If an exception is caught, display the details
ltrUploadResults.Text = "<b>An error has occurred:</b><br>" + _
ex.Message
Finally
'--- Always call FileUp.Dispose in the finally block
If Not (oFileUp Is Nothing) Then
oFileUp.Dispose()
End If
oFileUp = Nothing
End Try
End Sub
End Class
- Create the parent *.aspx page. This is the page that loads the user control as part of its content. Make sure the parent *.aspx page gets converted to a *.uplx page when you are done writing the code for this page. Leaving it as *.aspx lets you take advantage of VS.NET's intellisense during the design process, but in order to use the httpModule in production, the extension must be changed to *.uplx.
ParentForm.uplx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="ParentForm.uplx.vb" %>
<%@ Register tagprefix="FileUpCode" tagname="UploadForm" src="FileUpWebUserControl.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>WebForm1</TITLE>
<META name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<META name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<META name="vs_defaultClientScript" content="JavaScript">
<META name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<BODY MS_POSITIONING="GridLayout">
<FileUpCode:UploadForm runat="server" />
</BODY>
</HTML>
|