Wrox Programmer Forums
| Search | Today's Posts | Mark Forums Read
ASP.NET 1.0 and 1.1 Basics ASP.NET discussion for users new to coding in ASP.NET 1.0 or 1.1. NOT for the older "classic" ASP 3 or the newer ASP.NET 2.0.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the ASP.NET 1.0 and 1.1 Basics section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old October 24th, 2006, 08:20 AM
Registered User
 
Join Date: Oct 2006
Location: , , United Kingdom.
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Default

;)

 
Old October 24th, 2006, 08:20 AM
Friend of Wrox
Points: 2,876, Level: 22
Points: 2,876, Level: 22 Points: 2,876, Level: 22 Points: 2,876, Level: 22
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Jun 2003
Location: Denver, CO, USA.
Posts: 428
Thanks: 57
Thanked 2 Times in 2 Posts
Default

I already tried that route. Third party products are not a viable alternative.

I recall reading somewhere that classic asp could do what I need using script, but still cannot find an example.
 
Old October 24th, 2006, 08:34 AM
Wrox Author
Points: 13,255, Level: 49
Points: 13,255, Level: 49 Points: 13,255, Level: 49 Points: 13,255, Level: 49
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Oct 2005
Location: Ohio, USA
Posts: 4,104
Thanks: 1
Thanked 64 Times in 64 Posts
Send a message via AIM to dparsons
Default

Ron, via VBScript you can write a series of functions/methods and place them in a class to give you the same ability that ASPUpload provides, problem is I have never been able to find an example of how to do it because anyone that has figured it out has compliled it and sold it as a component or just never posted it to the web.

However, I know it is possible to facilitate an upload via striaght VBScript, you would just have to get it to play nice with your .NET stuff which isn't really difficult.



-------------------------
I will only tell you how to do it, not do it for you.
Unless, of course, you want to hire me to do work for you.

^^Thats my signature
 
Old October 24th, 2006, 08:41 AM
Friend of Wrox
Points: 2,876, Level: 22
Points: 2,876, Level: 22 Points: 2,876, Level: 22 Points: 2,876, Level: 22
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Jun 2003
Location: Denver, CO, USA.
Posts: 428
Thanks: 57
Thanked 2 Times in 2 Posts
Default

Despite reservations, I redesigned the submit page to return to the calling ASP page so I could try using dparsons's suggested solution of looping through the form controls. Unfortunately this loop:

For Each ctrl As Control In Me.Controls
    If TypeOf ctrl Is HtmlInputFile Then
        Dim fileUp As HtmlInputFile = CType(ctrl, HtmlInputFile)

        fileUp.PostedFile.SaveAs(fileUp.Name)
    End If
Next

Still says there are NO controls on the page to loop through, even when running on the submitting ASP page.

In addition:

for each item as objects in request.form

...does not see the file object either (not that it helped anyway, but I thought I'd see what it returned while I was banging my head on Microsoft's bloody wall).

Another dead end.
 
Old October 24th, 2006, 08:41 AM
Friend of Wrox
Points: 1,935, Level: 17
Points: 1,935, Level: 17 Points: 1,935, Level: 17 Points: 1,935, Level: 17
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Aug 2004
Location: United Kingdom
Posts: 550
Thanks: 0
Thanked 1 Time in 1 Post
Default

Hey Ron

This is possible, some sort of manipulations have to be done, but I am sure you can do it, just understand the code below that I have tried to create keeping in mind your requirement:

1. I have created a blank page that you have where the HTML code is rendered by your class as below (this is the HTML part of that page":

<form id="Form1" method="post" runat="server">
            <table width="100%" cellpadding="0" cellspacing="0">
                <tr>
                    <td><%=strHTML%><input type="hidden" runat="server" id="hdnUpload"></td>
                </tr>
            </table>
        </form>

Here strHTML is a string where I will render the HTML generated by your class.

Now the HTML generated must be having a button on click on which finally values will be submitted, what we will do is create a hidden named hdnUpload on your main page where the HTML is rendered, on click of button, will loop through controls in javascript and store comma separated values of <input type=file> in hidden hdnUpload, and finally when the page submits, we will check if the value of hdnUpload has some values, then save it to folder.

Just read the code below and try to understand:

[HTML code of ur blank page]
<HTML>
    <HEAD>
        <title></title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <table width="100%" cellpadding="0" cellspacing="0">
                <tr>
                    <td><%=strHTML%><input type="hidden" runat="server" id="hdnUpload"></td>
                </tr>
            </table>
        </form>
    </body>
</HTML>

[Codebehind of your blank page]

public class p2p : System.Web.UI.Page
    {
        protected System.Web.UI.HtmlControls.HtmlInputHidden hdnUpload;
        protected string strHTML;
        private void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            strHTML = GenerateControls();

            if (hdnUpload.Value != "")
//WRITE THE ACTUAL CODE TO UPLOAD FILES HERE
//BREAKING THE COMMA SEPARATED VALUES FROM hdnUpload

                Response.Write(hdnUpload.Value);
        }

        string GenerateControls()
        {
            string str = "<script>function CheckVal(){var objForm;objForm = document.forms[0];for (var i=1;i<objForm.elements.length;i++)" +
                "{if(objForm.elements[i].type == 'file'){ document.getElementById('hdnUpload').value += objForm.elements[i].value + ',';}}} </script><table width=100% cellpadding=0 cellspacing=0>" +
                "<tr><td><input type='file'></td></tr><tr><td><input type='file'></td></tr>"+
                "<tr><td><input type='submit' runat='server' value='Check' onclick='CheckVal()'></td></tr></table>";

            return str;
        }

If you have any doubts, let me know.


Regards
Mike
 
Old October 24th, 2006, 12:40 PM
Friend of Wrox
Points: 2,876, Level: 22
Points: 2,876, Level: 22 Points: 2,876, Level: 22 Points: 2,876, Level: 22
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Jun 2003
Location: Denver, CO, USA.
Posts: 428
Thanks: 57
Thanked 2 Times in 2 Posts
Default

Thanks to everybody who tried to figure out a way to do this. It appears as though the answer is, "You can't".

So, I've dropped an input tag on the form, and display it as needed. It appears at the very bottom, so it's out of sequence for the rest of the form, and if the user needs to upload more than one file, they'll just have to click submit more than once. That all sucks, but that's apparently as close as I can get to to what is needed without rewriting the application.

Thanks again!
 
Old October 24th, 2006, 04:15 PM
Wrox Author
Points: 13,255, Level: 49
Points: 13,255, Level: 49 Points: 13,255, Level: 49 Points: 13,255, Level: 49
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Oct 2005
Location: Ohio, USA
Posts: 4,104
Thanks: 1
Thanked 64 Times in 64 Posts
Send a message via AIM to dparsons
Default

I make no warranties, gurantees, and will not support this code, but it should work for you. (VBScript for uploading files)

<%
' ------------------------------------------------------------------------------
' Container of Field Properties
Class clsField
    Public FileName
    Public ContentType
    Public Value
    Public FieldName
    Public Length
    Public BinaryData
End Class
' ------------------------------------------------------------------------------
Class clsUpload
' ------------------------------------------------------------------------------
    Private nFieldCount
    Private oFields()
    Private psFileFullPath
    Private psError
    Private psFileInputName
' ------------------------------------------------------------------------------
    Public Property Get Count()
        Count = nFieldCount
    End Property
' ------------------------------------------------------------------------------
    Public Default Property Get Field(ByRef asFieldName)
        Dim lnLength
        Dim lnIndex

        lnLength = UBound(oFields)

        If IsNumeric(asFieldName) Then
            If lnLength >= asFieldName And asFieldName > -1 Then
                Set Field = oFields(asFieldName)
            Else
                Set Field = New clsField
            End If
        Else
            For lnIndex = 0 To lnLength
                If LCase(oFields(lnIndex).FieldName) = LCase(asFieldName) Then
                    Set Field = oFields(lnIndex)
                    Exit Property
                End If
            Next
            Set Field = New clsField
        End If
    End Property
' ------------------------------------------------------------------------------
    Public Function Exists(ByRef avKeyIndex)
        Exists = Not IndexOf(avKeyIndex) = -1
    End Function
' ------------------------------------------------------------------------------
    Public Property Get ValueOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        ValueOf = oFields(lnIndex).Value
    End Property
' ------------------------------------------------------------------------------
    Public Property Get FileNameOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        FileNameOf = oFields(lnIndex).FileName
    End Property
' ------------------------------------------------------------------------------
    Public Property Get LengthOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        LengthOf = oFields(lnIndex).Length
    End Property
' ------------------------------------------------------------------------------
    Public Property Get BinaryDataOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        BinaryDataOf = oFields(lnIndex).BinaryData
    End Property
' ------------------------------------------------------------------------------
    Private Function IndexOf(ByVal avKeyIndex)
        Dim lnIndex

        If avKeyIndex = "" Then
            IndexOf = -1
        ElseIf IsNumeric(avKeyIndex) Then
            avKeyIndex = CLng(avKeyIndex)
            If nFieldCount > avKeyIndex And avKeyIndex > -1 Then
                IndexOf = avKeyIndex
            Else
                IndexOf = -1
            End If
        Else
            For lnIndex = 0 To nFieldCount - 1
                If LCase(oFields(lnIndex).FieldName) = LCase(avKeyIndex) Then
                    IndexOf = lnIndex
                    Exit Function
                End If
            Next
            IndexOf = -1
        End If
    End Function
' ------------------------------------------------------------------------------
Public Property Let FileFullPath(sValue)
    psFileFullPath = sValue
End Property
'_________________________________________________ __________________________________
Public Property Get FileFullPath()
    FileFullPath = psFileFullPath
End Property
' ------------------------------------------------------------------------------
Public Property Let FileInputName(sValue)
    psFileInputName = sValue
End Property
' -------------------- ----------------------------------------------------------
Public Function Save()
    if psFileFullPath <> "" and psFileInputName <> "" then
        'Save to connectionless client side recordset, write to stream,
        'and persist stream.
        'would think you should be able to write directly to
        'stream without recordset, but I could not get that to work

        On error resume next
        binData = o.BinaryDataOf(psFileInputName)
        set rs = server.createobject("ADODB.RECORDSET")
        rs.fields.append "FileName", 205, LenB(binData)
        rs.open
        rs.addnew
         rs.fields(0).AppendChunk binData

        if err.number = 0 then
            set objStream = Server.CreateObject("ADODB.Stream")
              objStream.Type = 1
               objStream.Open
             objStream.Write rs.fields("FileName").value
            objStream.SaveToFile psFileFullPath, 2
            objStream.close
            set objStream = Nothing

        ENd if
        rs.close
        set rs = nothing
        psError = Err.Description
else
        psError = "One or more required properties (FileFullPath and/or FileInputName) not set"

  End If


End Function

Public Property Get Error()
    Error = psError
End Property


' ------------------------------------------------------------------------------
    Public Property Get ContentTypeOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        ContentTypeOf = oFields(lnIndex).ContentType
    End Property

' ------------------------------------------------------------------------------
    Private Sub Class_Terminate()
        Dim lnIndex
        For lnIndex = 0 To nFieldCount - 1
            Set oFields(0) = Nothing
        Next
    End Sub
' ------------------------------------------------------------------------------
    Private Sub Class_Initialize()

        Dim lnBytes ' Bytes received from the client
        Dim lnByteCount ' Number of bytes received
        Dim lnStartPosition ' Position at which content begins
        Dim lnEndPosition ' Position at which content ends

        Dim loDic ' Contains properties of each
                                ' specific field
                                ' Local dictionary object(s)
                                ' to be appended to class-scope
                                ' dictioary object.

        Dim lnBoundaryBytes ' Bytes contained within the current boundary
        Dim lnBoundaryStart ' Position at wich the current boundary begins
                                ' within the lnBytes binary data.
        Dim lnBoundaryEnd ' Position at wich the current boundary ends
                                ' within the lnBytes binary data.
        Dim lnDispositionPosition

        Dim lsFieldName ' Name of the current field being parsed from
                                ' Binary Data
        Dim lsFileName ' Name of the file within the current boundary
        Dim lnFileNamePosition ' Location of file name within current boundary
        Dim loField ' clsField Object
        Dim lsValue ' Value of the current field
        Dim lsContentType ' ContentType of the binary file (MIME Type)

        ' Initialize Fields
        nFieldCount = 0
        ReDim oFields(-1)

        ' Read the bytes (binary data) into memory
        lnByteCount = Request.TotalBytes
        lnBytes = Request.BinaryRead(lnByteCount)

        'Get the lnBoundaryBytes
        lnStartPosition = 1
        lnEndPosition = InstrB(lnStartPosition, lnBytes, CStrB(vbCr))

        If lnEndPosition >= lnStartPosition Then
            lnBoundaryBytes = MidB(lnBytes, lnStartPosition, lnEndPosition - lnStartPosition)
        End If

        lnBoundaryStart = InstrB(1, lnBytes, lnBoundaryBytes)


        ' Loop until the BoundaryBytes begin with "--"
        Do Until (lnBoundaryStart = InstrB(lnBytes, lnBoundaryBytes & CStrB("--")))

            ' All data within this boundary is stored within a local dictionary
            ' to be appended to the class-scope dictionary.

            ReDim Preserve oFields(nFieldCount)
            nFieldCount = nFieldCount + 1

            Set loField = New clsField

            lnDispositionPosition = InstrB(lnBoundaryStart, lnBytes, CStrB("Content-Disposition"))

            ' Get an object name
            lnStartPosition = InstrB(lnDispositionPosition, lnBytes, CStrB("name=")) + 6
            lnEndPosition = InstrB(lnStartPosition, lnBytes, CStrB(""""))
            lsFieldName = CStrU(MidB(lnBytes, lnStartPosition, lnEndPosition - lnStartPosition))
            loField.FieldName = lsFieldName

            ' Get the location fo the file name.
            lnFileNamePosition = InstrB(lnBoundaryStart, lnBytes, CStrB("filename="))
            lnBoundaryEnd = InstrB(lnEndPosition, lnBytes, lnBoundaryBytes)

            'Test if object is a file
            If Not lnFileNamePosition = 0 And lnFileNamePosition < lnBoundaryEnd Then

                ' Parse Filename
                lnStartPosition = lnFileNamePosition + 10
                lnEndPosition = InstrB(lnStartPosition, lnBytes, CStrB(""""))
                lsFileName = CStrU(MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition))
                loField.FileName = lsFileName

                ' Parse Content-Type
                lnStartPosition = InstrB(lnEndPosition,lnBytes,CStrB("Content-Type:")) + 14
                lnEndPosition = InstrB(lnStartPosition,lnBytes,CStrB(vbCr))
                lsContentType = CStrU(MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition))
                loField.ContentType = lsContentType

                ' Parse Content
                lnStartPosition = lnEndPosition + 4
                lnEndPosition = InstrB(lnStartPosition,lnBytes,lnBoundaryBytes)-2
                lsValue = MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition)
                loField.BinaryData = lsValue & CStrB(vbNull)
                loField.Length = LenB(lsValue)
            Else

                ' Parse Content
                lnStartPosition = InstrB(lnDispositionPosition, lnBytes, CStrB(vbCr)) + 4
                lnEndPosition = InstrB(lnStartPosition, lnBytes, lnBoundaryBytes) - 2
                lsValue = CStrU(MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition))
                loField.Value = lsValue
                loField.Length = Len(lsValue)
            End If

            Set oFields(UBound(oFields)) = loField

            'Loop to next object
            lnBoundaryStart = InstrB(lnBoundaryStart + LenB(lnBoundaryBytes), lnBytes, lnBoundaryBytes)

            Set loField = Nothing

        Loop

    End Sub
' ------------------------------------------------------------------------------
    Private Function CStrU(ByRef psByteString)
        Dim lnLength
        Dim lnPosition
        lnLength = LenB(psByteString)
        For lnPosition = 1 To lnLength
            CStrU = CStrU & Chr(AscB(MidB(psByteString, lnPosition, 1)))
        Next
    End Function
' ------------------------------------------------------------------------------
    Private Function CStrB(ByRef psUnicodeString)
        Dim lnLength
        Dim lnPosition
        lnLength = Len(psUnicodeString)
        For lnPosition = 1 To lnLength
            CStrB = CStrB & ChrB(AscB(Mid(psUnicodeString, lnPosition, 1)))
        Next
    End Function
' ------------------------------------------------------------------------------
End Class
' ------------------------------------------------------------------------------
%>

-------------------------
I will only tell you how to do it, not do it for you.
Unless, of course, you want to hire me to do work for you.

^^Thats my signature
 
Old October 25th, 2006, 12:43 AM
Friend of Wrox
Points: 1,935, Level: 17
Points: 1,935, Level: 17 Points: 1,935, Level: 17 Points: 1,935, Level: 17
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Aug 2004
Location: United Kingdom
Posts: 550
Thanks: 0
Thanked 1 Time in 1 Post
Default

Hey Ron

How can u say it is impossible? Did u try the code I gave, it works really easy with it. Strange u didn't try my code and made an assumption.


Regards
Mike
 
Old October 25th, 2006, 07:57 AM
Friend of Wrox
Points: 2,876, Level: 22
Points: 2,876, Level: 22 Points: 2,876, Level: 22 Points: 2,876, Level: 22
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Jun 2003
Location: Denver, CO, USA.
Posts: 428
Thanks: 57
Thanked 2 Times in 2 Posts
Default

Dparsons,

Thanks for posting that script. I finally found something similar, but was unable to get it to work. I tried sending it to the client with the generated code and embedding it in the receiving page's HTML in ASP, both using cross-posting and direct post-backs. It produced numerous errors and prevented other scripts on the page from running. After debugging several, I gave up.

Thanks again!
 
Old October 25th, 2006, 08:03 AM
Wrox Author
Points: 13,255, Level: 49
Points: 13,255, Level: 49 Points: 13,255, Level: 49 Points: 13,255, Level: 49
Activity: 0%
Activity: 0% Activity: 0% Activity: 0%
 
Join Date: Oct 2005
Location: Ohio, USA
Posts: 4,104
Thanks: 1
Thanked 64 Times in 64 Posts
Send a message via AIM to dparsons
Default

Create a reference to it like you would a recordset or an ADODB conneciton Server.CreateObject (Of course now you have moved out of the realm of .NET and into Classic). So, you won't be able to use this script "as is" since you will need to reference it inside of .NET so you will need to compile it into a DLL that you can make a reference to in code.

You will also, probably, have to set the aspcompat value of the page to true.

-------------------------
I will only tell you how to do it, not do it for you.
Unless, of course, you want to hire me to do work for you.

^^Thats my signature




Similar Threads
Thread Thread Starter Forum Replies Last Post
Filter File Types in ASP.NET File Upload ramuis78 ASP.NET 2.0 Basics 2 May 31st, 2007 10:50 AM
File Upload question - source directory turklet Beginning PHP 1 February 23rd, 2007 10:06 AM
File Upload Question? Ron Howerton ASP.NET 1.0 and 1.1 Basics 17 October 23rd, 2006 01:08 PM
File Upload Question Ron Howerton ASP.NET 2.0 Basics 3 October 23rd, 2006 01:06 PM
Whole Folder upload(Multi file Upload) ramasamy_rams XML 1 September 9th, 2005 12:43 PM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.