Avatar billede okidoky Nybegynder
16. maj 2006 - 17:06 Der er 12 kommentarer og
1 løsning

Har virkelig brug for dette

Jeg har en side med billeder, vil have at bruger kan uploade billede med tekst. ??? jeg har et uploade script til billede, men hvordan skal jeg tilføje tekst til???


<%
dim strAction
strAction = request("action")

select case strAction
  case "upload"
    UploadFile
  case else
    ShowForm
end select


sub ShowForm
  %>
  <form enctype="multipart/form-data" action="upload.asp?action=upload" method=post>
  Fil: <input type="file" name="file"><br>
  <input type="submit" value="Upload">
  </form>
  <%
end sub


sub UploadFile
  dim intPosMIMEHeader, intPosFileDataStart
  dim intPosFileNameStart, intPosFileNameEnd
  dim intPosFileDataEnd, intDataSize
  dim binData, binFileData, binFileName, binStart
  dim strFileName
  dim objFSO, objFile

  intDataSize = request.totalbytes
  binData = request.binaryread(intDataSize)

  intPosMIMEHeader = instrB(binData,chrB(13) & chrB(10)) - 1
  intPosFileDataStart = instrB(binData, chrB(13) & chrB(10) & chrB(13) & chrB(10)) + 4
  intPosFileNameStart = instrB(binData,cstrB("filename=")) + 10 
  intPosFileNameEnd = instrB(intPosFileNameStart,binData,chrB(34))
  binStart = midB(binData,1,intPosMimeHeader)
  binFileName = midB(binData,intPosFileNameStart, _
                    intPosFileNameEnd - intPosFileNameStart)
  intPosFileDataEnd = instrB(intPosMIMEHeader, binData, binStart) - 2

  strFileName = bin2str(binFileName)
  strFileName = right(strFileName, len(strFileName) - instrrev(strFileName,"\"))

  set objFSO = server.createobject("Scripting.FileSystemObject")
  set objFile = objFSO.CreatetextFile(server.mappath(".\image\players\" & strFileName), _
                                      true, false)
  objFile.write bin2str(midB(binData, intPosFileDataStart, _
                        intPosFileDataEnd - intPosFileDataStart))
  objFile.close
  set objFile = Nothing
  set objFSO = Nothing
 
  response.write "Filen er uploadet"
end sub


function bin2str(byref binS)
  ' omdanner en binær følge til en tekststreng
  dim i, strRes
  for i = 1 to lenB(binS)
    strRes = strRes & chr(ascB(midB(binS, i, 1)))
  next
  bin2str = strRes
end function


function cstrB(strS)
  ' omdanner en tekststreng til en binær følge
  dim i, binRes
  for i = 1 to len(strS)
    binRes = binRes & chrB(asc(mid(strS,i,1)))
  next
  cstrB = binRes
end function

%>
Avatar billede nidyahou Praktikant
16. maj 2006 - 17:20 #1
det er faktisk ikke muligt når du har binary - det jeg har gjort er at redirecte til en form side, hvor man så kan tilføje noget tekst efter billedet faktisk er uploadet.

min tilføj tekst form indeholder:
hidden - filsti (altså originalt filnavn)
navn - det navn som brugeren skal se billedet hedder i f.eks. alt
tekst - selvsagt
Avatar billede nidyahou Praktikant
16. maj 2006 - 17:22 #2
http://www.eksperten.dk/spm/703573

kan nok hjælpe dig meget, jeg tror din process minder om min :)
Avatar billede okidoky Nybegynder
17. maj 2006 - 11:59 #3
Jeg har set og prøvet den... men det var ikke det jeg ville have, hvorfor kan man i php have et script med fil og text, men ikke med asp?
Avatar billede nidyahou Praktikant
17. maj 2006 - 21:44 #4
det kan du faktisk også - eagleeye har i min tråd kommet med et link til et script som kan :)
Avatar billede nidyahou Praktikant
17. maj 2006 - 21:44 #5
det er kun et problem når du prøver at bruge request.binaryread og request.form sammen :)
Avatar billede tofte Juniormester
17. maj 2006 - 22:06 #6
man kan godt begge dele i asp, det er bare ikke så nemt, man kan godt pille form data ud af den binære strøm, dog ikke med request.from. Det kræver dog en del manipuleren.
Avatar billede okidoky Nybegynder
18. maj 2006 - 16:05 #7
ok men hvordan, er der ingen øvelse på det nogen steder?
Avatar billede okidoky Nybegynder
18. maj 2006 - 16:07 #8
Ja den eagleeye kom med har jeg set, men ved ikke hvor jeg skal tilføje et eksra input?

kan du hjælpe med med det? hvor skal jeg tilføje et ekstra input. for der er kun en ?
Avatar billede nidyahou Praktikant
18. maj 2006 - 17:01 #9
Du kan jo sætte dine forms ind under samme side som man skal vælge hvilke filer der skal uploades og så sætte dit insert script ind under postit.asp
Avatar billede tofte Juniormester
19. maj 2006 - 01:06 #10
Jeg har fundet det her script - jeg kan dog ikke huske hvor:
<%
'***************************************
' File:      Upload.asp
' Author: Jacob "Beezle" Gilley
' Email:  avis7@airmail.net
' Date:  12/07/2000
' Comments: The code for the Upload, CByteString,
'            CWideString    subroutines was originally
'            written by Philippe Collignon...or so
'            he claims. Also, I am not responsible
'            for any ill effects this script may
'            cause and provide this script "AS IS".
'            Enjoy!
'****************************************

Class FileUploader
    Public  Files
    Private mcolFormElem

    Private Sub Class_Initialize()
        Set Files = Server.CreateObject("Scripting.Dictionary")
        Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    End Sub
   
    Private Sub Class_Terminate()
        If IsObject(Files) Then
            Files.RemoveAll()
            Set Files = Nothing
        End If
        If IsObject(mcolFormElem) Then
            mcolFormElem.RemoveAll()
            Set mcolFormElem = Nothing
        End If
    End Sub

    Public Property Get Form(sIndex)
        Form = ""
        If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
    End Property

    Public Default Sub Upload()
        Dim biData, sInputName
        Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
        Dim nPosFile, nPosBound

        biData = Request.BinaryRead(Request.TotalBytes)
        nPosBegin = 1
        nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
       
        If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
       
        vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
        nDataBoundPos = InstrB(1, biData, vDataBounds)
       
        Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
           
            nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
            nPos = InstrB(nPos, biData, CByteString("name="))
            nPosBegin = nPos + 6
            nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
            sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
            nPosBound = InstrB(nPosEnd, biData, vDataBounds)
           
            If nPosFile <> 0 And  nPosFile < nPosBound Then
                Dim oUploadFile, sFileName
                Set oUploadFile = New UploadedFile
               
                nPosBegin = nPosFile + 10
                nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
                sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
                oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))

                nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
                nPosBegin = nPos + 14
                nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
               
                oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
               
                nPosBegin = nPosEnd+4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
               
                If oUploadFile.FileSize > 0 Then Files.Add LCase(sInputName), oUploadFile
            Else
                nPos = InstrB(nPos, biData, CByteString(Chr(13)))
                nPosBegin = nPos + 4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            End If

            nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
        Loop
    End Sub

    'String to byte string conversion
    Private Function CByteString(sString)
        Dim nIndex
        For nIndex = 1 to Len(sString)
          CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
        Next
    End Function

    'Byte string to string conversion
    Private Function CWideString(bsString)
        Dim nIndex
        CWideString =""
        For nIndex = 1 to LenB(bsString)
          CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1)))
        Next
    End Function
End Class

Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
   
    Public Property Get FileSize()
        FileSize = LenB(FileData)
    End Property

    Public Sub SaveToDisk(sPath)
        Dim oFS, oFile
        Dim nIndex
   
        If sPath = "" Or FileName = "" Then Exit Sub
        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
   
        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
        If Not oFS.FolderExists(sPath) Then Exit Sub
       
        Set oFile = oFS.CreateTextFile(sPath & FileName, True)
       
        For nIndex = 1 to LenB(FileData)
            oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
        Next

        oFile.Close
    End Sub
   
    Public Sub SaveToDatabase(ByRef oField)
        If LenB(FileData) = 0 Then Exit Sub
       
        If IsObject(oField) Then
            oField.AppendChunk FileData
        End If
    End Sub

End Class
%>
Avatar billede tofte Juniormester
19. maj 2006 - 01:07 #11
Der kan du kalde funktionen form, og få værdien af en form. Der er et medfølgende eksempel her :

<%@ Language=VBScript %>
<%Option Explicit%>
<!-- #include file="upload.asp" -->
<%

'NOTE - YOU MUST HAVE VBSCRIPT v5.0 INSTALLED ON YOUR WEB SERVER
'      FOR THIS LIBRARY TO FUNCTION CORRECTLY. YOU CAN OBTAIN IT
'      FREE FROM MICROSOFT WHEN YOU INSTALL INTERNET EXPLORER 5.0
'      OR LATER.


' Create the FileUploader
Dim Uploader, File
Set Uploader = New FileUploader

' This starts the upload process
Uploader.Upload()

'******************************************
' Use [FileUploader object].Form to access
' additional form variables submitted with
' the file upload(s). (used below)
'******************************************
Response.Write "<b>Thank you for your upload " & Uploader.Form("fullname") & "</b><br>"

' Check if any files were uploaded
If Uploader.Files.Count = 0 Then
    Response.Write "File(s) not uploaded."
Else
    ' Loop through the uploaded files
    For Each File In Uploader.Files.Items
       
        ' Check where the user wants to save the file
        If Uploader.Form("saveto") = "disk" Then
   
            ' Save the file
            File.SaveToDisk "E:\UploadedFiles\"
   
        ElseIf Uploader.Form("saveto") = "database" Then
           
            ' Open the table you are saving the file to
            Set RS = Server.CreateObject("ADODB.Recordset")
            RS.Open "MyUploadTable", "CONNECT STRING OR ADO.Connection", 2, 2
            RS.AddNew ' create a new record
           
            RS("filename")    = File.FileName
            RS("filesize")      = File.FileSize
            RS("contenttype") = File.ContentType
       
            ' Save the file to the database
            File.SaveToDatabase RS("filedata")
           
            ' Commit the changes and close
            RS.Update
            RS.Close
        End If
       
        ' Output the file details to the browser
        Response.Write "File Uploaded: " & File.FileName & "<br>"
        Response.Write "Size: " & File.FileSize & " bytes<br>"
        Response.Write "Type: " & File.ContentType & "<br><br>"
    Next
End If

%>

og et eksempel på en side som sender filerne :

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="uploadexmple.asp">
    <TABLE BORDER=0>
    <tr><td><b>Enter your fullname:</b><br><INPUT TYPE=TEXT SIZE=40 NAME="FULLNAME"></td></tr>
    <tr><td><b>Select a file to upload:</b><br><INPUT TYPE=FILE SIZE=50 NAME="FILE1"></td></tr>
    <tr><td><b>Save To:</b>&nbsp;&nbsp;
        Disk&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="disk" checked>&nbsp;&nbsp;
        Database&nbsp;<INPUT TYPE=RADIO NAME="saveto" value="database">
    </td></tr>
    <tr><td align="center"><INPUT TYPE=SUBMIT VALUE="Upload!"></td></tr>
    </TABLE>
</FORM>
</BODY>
</HTML>
Avatar billede okidoky Nybegynder
25. maj 2006 - 14:29 #12
tofte svar lige
Avatar billede tofte Juniormester
25. maj 2006 - 17:30 #13
svar, kan du få det til at virke?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester