Just nu i M3-nätverket
Gå till innehåll

Uppladdning av pdf-fil


Micke_skane

Rekommendera Poster

Hej,

 

Sitter med en kod som laddar upp filer till servern och om jag väljer att ladda upp doc, xls, eller någon bild går det Bra, det bara "susar" till så är filen upplagd.

Men om jag väljer en pdf-fil tar det SÅÅ lång tid innan filen är upplagd.

5 min för En sida i pdf-format! Tänk om det skulle vara 25 sidor...

 

Känns som om koden/filformatet "segar" ner servern...eller nått annat!

Vet inte om jag ska skicka in Hela koden(rätt mycket)...Jo, det gör jag :)

 

[log]

<%

' Justera tiden beroende på hur stora filer jag kommer tillåta att skicka

Server.ScriptTimeout = 500400

 

Const ForWriting = 2

Const TristateTrue = -1

CrLf = Chr(13) & Chr(10)

 

'Funktionen för att hämta ut ett värde av ett specifikt fältnamn:

'Denna funktion hämtar ett fälts namn

Function GetFieldName(infoStr)

sPos = InStr(infoStr, "name=")

EndPos = InStr(sPos + 6, infoStr, Chr(34) & ";")

If EndPos = 0 Then

EndPos = inStr(sPos + 6, infoStr, Chr(34))

End If

GetFieldName = Mid(infoStr, sPos + 6, endPos - (sPos + 6))

End Function

 

'Funktion för att hämta ut filnamnet från den postade formen:

'Denna funktion hämtar fältets värde i filnamn

Function GetFileName(infoStr)

sPos = InStr(infoStr, "filename=")

EndPos = InStr(infoStr, Chr(34) & CrLf)

GetFileName = Mid(infoStr, sPos + 10, EndPos - (sPos + 10))

End Function

 

'Funktionen för att kontrollera att filen är av typen MIME:

' Denna funktion hämtar ett filens MIMEtyp

Function GetFileType(infoStr)

sPos = InStr(infoStr, "Content-Type: ")

GetFileType = Mid(infoStr, sPos + 14)

End Function

 

PostData = ""

 

' Hämtar hela headern som postats genom att hämta headerns storlek med dess data

Dim biData

biData = Request.BinaryRead(Request.TotalBytes)

 

' Tänk nu på att det är binär data så jag måste ändra detta till

' någonting som är hanterbart och läsbart.

For nIndex = 1 to LenB(biData)

PostData = PostData & Chr(AscB(MidB(biData,nIndex,1)))

Next

 

' När du använt BinaryRead så kan du inte använda Request-objektet. Därför måste vi

' hantera alla request-variablerna själva genom att hämta ut detta

ContentType = Request.ServerVariables("HTTP_CONTENT_TYPE")

 

' delar upp datat

ctArray = Split(ContentType, ";")

 

' En fil som postas fungerar endast om du i formen satt "multipart/form-data"

' - så vi kontrollerar att det är gjort

If Trim(ctArray(0)) = "multipart/form-data" Then

ErrMsg = ""

 

' Hämta all data om formen

bArray = Split(Trim(ctArray(1)), "=")

Boundary = Trim(bArray(1))

 

' Splitta upp all denna indata

FormData = Split(PostData, Boundary)

 

' Dela upp informationen för varje variabel och data

Dim myRequest, myRequestFiles(9, 3)

Set myRequest = CreateObject("Scripting.Dictionary")

FileCount = 0

 

' För varje fält som finns i den postade formen

For x = 0 to UBound(FormData)

 

' Två CrLf markerar slutet på informationen om ett fält. Allt efter det är ett värde

InfoEnd = InStr(FormData(x), CrLf & CrLf)

If InfoEnd > 0 Then

 

' Hämtar informationen för aktuellt fält utom skräptecken i slutet på strängen

varInfo = Mid(FormData(x), 3, InfoEnd - 3)

 

' Hämtar värdet på fältet, vi tar bort CrLf både i början och i slitet

varValue = Mid(FormData(x), InfoEnd + 4,Len(FormData(x)) - InfoEnd - 7)

 

' Är detta filen eller fältet

If (InStr(varInfo, "filename=") > 0) Then

 

' placera vår fil i en stor array.

' Om du vill ladda upp flera filer på en gång så visas här hur du

' kan göra, men formen du postade från tillåter bara en så då får

' du göra om den så fler filen kan postas.

 

myRequestFiles(FileCount, 0) = GetFieldName(varInfo)

myRequestFiles(FileCount, 1) = varValue

myRequestFiles(FileCount, 2) = GetFileName(varInfo)

myRequestFiles(FileCount, 3) = GetFileType(varInfo)

FileCount = FileCount + 1

 

Else

' Detta är ett vanligt fält

myRequest.add GetFieldName(varInfo), varValue

End If

End If

Next

 

Else

ErrMsg = "Du har fel encoding typ!"

End If

 

' Om du tillåter mer filer än 1, gör om detta till en loop

 

' instansierar File ScriptingSystem (FSO)

Set lf = server.createObject("Scripting.FileSystemObject")

 

' vad valde användaren att använda för filnamn?

If myRequest("filename") = "original" Then

 

' Vad är det för klient som skickar filen, Machintosh skickar endast filnamnet

' medan Windows även skickar med sökvägen till filen.

BrowserType = UCase(Request.ServerVariables("HTTP_USER_AGENT"))

 

If (InStr(BrowserType, "WIN") > 0) Then

' Det är Windows med sökväg i

sPos = InStrRev(myRequestFiles(0, 2), "\")

fName = Mid(myRequestFiles(0, 2), sPos + 1)

End If

 

If (InStr(BrowserType, "MAC") > 0) Then

' Det är mac, endast filnamnet skickas

fName = myRequestFiles(0, 2)

End If

 

' här skapar du filnamnet som vi skall använda

FilePath = fName

Else

' använd det filnamn som användaren skrev istället

' Om användaren valt att spara med ett eget filnamn, då tar vi det istället.

FilePath = myRequest("userSpecifiedName")

End If

 

' Kontrollera vilken sorts fil det är

If Lcase(Right(FilePath, 4)) <> ".pdf" Then

Response.Redirect "admin_redigera_kampanjer.asp?feedback=manualfil_fel"

Else

 

' anger sökvägen dit filen skall sparas

SavePath = Server.MapPath("filer/pdf/" & FilePath)

 

' skapar objektet för att kunna spara en fil, finns den så skriver vi över den

Set SaveFile = lf.CreateTextFile(SavePath, True)

 

' Skriver filen (arrayen) till disk

SaveFile.Write(myRequestFiles(0, 1))

 

' Skicka filnamnet, ansvarig person till databasen

'Dim Conn, ConnString, rs, admin_person

'Set Conn = Server.CreateObject("ADODB.Connection")

'ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("")

'Conn.Open ConnString

'admin_person = Session("anvnamn")

'fil = FilePath

'Dim cmd

' Set cmd = CreateObject("ADODB.Command")

'Set cmd.ActiveConnection = Conn

'cmd.CommandText = "INSERT INTO fil_kampanj_manual (filnamn, admin_person)"& VbCrLf &"VALUES ('"& fil &"', '"& admin_person &"')"

'Set rs = cmd.Execute

 

 

' stänger och frigör objektet

SaveFile.Close

If ErrMsg = "" Then

Response.Redirect "admin_redigera_kampanjer.asp?feedback=manualfil"

'Response.Write FilePath

Else

Response.Redirect "admin_redigera_kampanjer.asp?feedback=filfel"

End If

End If

%>

[/log]

 

Någon som kan förstå Varför det tar Så lång tid att ladda upp pdf-filer?

 

Mvh Micke

 

Länk till kommentar
Dela på andra webbplatser

märkligt om filtypen ska påverka uppladdningshastigheten

 

 

Det gör den inte och kommer inte att göra det heller. Däremot är jag "rätt" säker på att filstorleken gör det, därför skulle det vara bra om frågeställaren kollar det... :)

 

Vidare så har IIS nån skum gräns på ca 2 MB på uppladdade filer, så ska man ladda upp mer, bör man lägga in andra komponenter och köra på dem istället. Eller hitta en _helt_ annan lösning, tex att maila upp filerna istället och göra nåt script som hanterar det.

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hej alla som svarat,

 

Väntat på Mig...

Har varit så upptagen med andra saker idag :)

NU har jag kolalt hur stor den ena pdf-filen var, den som tog 5 min!

Storlek = 221 kB

 

Nä, jag tror inte heller att filformatet har betydelse men Då det fungerar SÅ bra på den andra filerna så börjar man "titta" på dem "ologiska" anledningarna...För inget annat är ändrat än Vilken sort fil det är...

 

Ska testa att avaktivera brandväggen så får jag se om det är Den...

Långsökt, jag vet men det gäller ju att testa o se :)

 

Micke

 

Länk till kommentar
Dela på andra webbplatser

Varken brandvägg eller IIS bryr sig om vad filen heter i efternamn. Däremot, av nån anledning som jag inte ens vill gissa, så kanske IIS har trassel med MIME-typerna. Har du Acrobar Reader installerat på servern? om "ja" - ta bort det!

 

Har du testat mot annan server?

 

[inlägget ändrat 2005-09-17 19:34:16 av Mr Andersson]

Länk till kommentar
Dela på andra webbplatser

5 minuter för 221KB ger 0,7KB/s. Sannerligen inte mycket!

 

ungefär samma hastighet som en gammal NMT-telefon med dålig mottagning. Inte så bra...

 

 

 

Länk till kommentar
Dela på andra webbplatser

Ja, själv tycker jag att det är lång tid. men det är klart Allt är relativt :)

 

Vet inte om det är Acrobat Reader på servern!

Får jag kolla i veckan och jag har inte kollat på en annan server heller.

Har liksom inte tillgång till någon annan server.

 

Är där någon som sitter på ett VBScript som fungerar som man skulle kunna testa med? O Nä, jag fiskar inte efter script i första taget men Om där är någon juste person som vill dela med sig Denna gång skulle jag bli :)

 

Tycker Det är märkligt...!

 

 

 

Länk till kommentar
Dela på andra webbplatser

Acrobat Reader är ett program man har på sin dator själv

 

Ja, men har man det på servnern, det kan ändra MIME-typen, som i sin tur skulle kunna påverka filhanteringen i IIS. Bara en tanke....

 

 

 

Länk till kommentar
Dela på andra webbplatser

Tycker du...:)

 

Det är nog för att jag skriver som jag tänker!

 

Men om där är = ingen betoning på om

Men Om där är = betoning på Om

 

Tar inget betalt för undervisningen :)

 

Länk till kommentar
Dela på andra webbplatser

Som i Acrobat Reader? Jag plagierar bara det sätt Adobe använder... Fast du kanske tänkte på nåt annat? Jag är kanske lite inkonsekvent vad gäller gemener/versaler?

 

 

 

Länk till kommentar
Dela på andra webbplatser

inte för att det spelar så stor roll, men med knapaprna i inläggsfönstret kan man skriva både med kursiv och fet stil! Dessutom en massa olika färger :-)

 

Länk till kommentar
Dela på andra webbplatser

Provade igen och det gick men det tog sin lilla tid!

 

Satte timeout till:

[b]Server[/b].ScriptTimeout = 500400

 

Det borde räcka denna gång.

Ni har inget script liggandes i era "lådor"?

 

Micke

 

Länk till kommentar
Dela på andra webbplatser

Hmm.... Egennamn (eller varumärken, som man ska skriva som dom ska skrivas) har alltid versaler i början, tex Acrobar Reader, men ord som "denna" och "om" mitt i en mening ska inte ha versaler i början, oavsett hur man tänker. Ska man ge en viss betydelse av ett ord, ska man kursivera det.

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Om du visste hur många som har det...

 

Fler än du hoppas på, jobbar aktivt på sina serverar och då finns det allt möjligt skit installerat.

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hur var det med scriptet?

Kolla på http://www.freeaspupload.net/

eller

http://www.hotscripts.com/ASP/Scripts_and_Components/File_Manipulation/Upload_Systems/index.html

 

Det är inte så att det redan finns någon upload-komponent installerad på server tex. ASPUpload?

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...