Kom ihåg mig?
Home Menu

Menu


Ladda upp filer?

Ämnesverktyg Visningsalternativ
Oläst 2004-07-06, 18:25 #1
Frejs avatar
Frej Frej är inte uppkopplad
Flitig postare
 
Reg.datum: Jul 2004
Inlägg: 463
Frej Frej är inte uppkopplad
Flitig postare
Frejs avatar
 
Reg.datum: Jul 2004
Inlägg: 463
Tja!

Jag har lite problem med en sak jag försöker få igång.

Jag vill kunna ladda upp filer till en webserver.
Men det krävs lite säkerhet så jag vill lägga in filerna
i en SQL 2000 Server Databas.
Sen när man laddar ner filerna så ska de skapas
från databasen och läggas i en temp mapp.
När filen är färdigtankad så tas den bort.
Men jag får det inte riktigt att fungera som jag vill.
Så här ser min nuvarande kod ut.
Jag skriver i ASP 3.0 vbScript.
Tack på förhand...



'**********************************************
'* Ladda in en fil
'**********************************************
If Request.QueryString("action") = "upload" then

Response.Expires=0

Dim UploadRequest, byteCount, RequestBin, PosBeg, i, char, PosEnd, boundary, boundaryPos, Pos, intCount
Dim Name, PosFile, value, filename, contentType, filepathname, PosBound, MyFile, ScriptObject, DBFil

byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)

Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

contentType = UploadRequest.Item("file1").Item("ContentType")
filepathname = UploadRequest.Item("file1").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("file1").Item("Value")
Response.Write UploadRequest.Item("file1").Item("Value")

'Lägg in skiten i databasen
Dim rsFil
Set rsFil = objConn.Execute("INSERT INTO Inv_Lic_Fil (Inv_Lic_Fil_ByteCount,Inv_Lic_Fil_ContentType,Inv _Lic_Fil_FilePath,Inv_Lic_Fil_FileName,Inv_Lic_Fil _Licens,Inv_Lic_Fil_Datum) VALUES (" & byteCount & ",'" & contentType & "','" & filepathname & "','" & filename & "','" & idLicens & "','" & Date() & "') SELECT @@IDENTITY").NextRecordSet
'Set rsFil = objConn.Execute("INSERT INTO Inv_Lic_Fil (Inv_Lic_Fil_ByteCount,Inv_Lic_Fil_FilePath,Inv_Li c_Fil_FileName,Inv_Lic_Fil_Licens,Inv_Lic_Fil_Datu m) VALUES (" & byteCount & ",'" & filepathname & "','" & filename & "','" & idLicens & "','" & Date() & "') SELECT @@IDENTITY").NextRecordSet

Response.Write "
Byte Count:" & byteCount
Response.Write "
Content Type:" & contentType
Response.Write "
File Path Name:" & filepathname
Response.Write "
File Name:" & filename
Response.Write "
Value:" & value

'Response.Redirect("inventering_licens_filer.asp?i d=" & idLicens & "&print=no")

End if


'**********************************************
'* Bygg en fil
'**********************************************
'If Request.QueryString("action") = "ladda" then

Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
Set MyFile = ScriptObject.CreateTextFile("C:\_Websidor\_WebOffi ce\_Utveckling\_Licenser\" & filename)

For i = 1 to LenB(value)
'MyFile.Write chr(AscB(MidB(value,i,1)))
'objConn.Execute("UPDATE Inv_Lic_Fil SET Inv_Lic_Fil_Value = Inv_Lic_Fil_Value & '" & chr(AscB(MidB(value,i,1))) & "' WHERE Inv_Lic_Fil_Id = '" & rsFil(0) & "'")
Response.Write chr(AscB(MidB(value,i,1)))
Next


MyFile.Close
set myfile = nothing

'End if


'**********************************************
'* Fil functioner
'**********************************************


Sub BuildUploadRequest(RequestBin)

PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)

Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))

Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")

Pos = InstrB(BoundaryPos,RequestBin,getByteString("Conte nt-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filen ame="))
PosBound = InstrB(PosEnd,RequestBin,boundary)

If PosFile<>0 AND (PosFile<PosBound) Then

PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))

UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))

ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType

PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else

Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If

UploadControl.Add "Value" , Value

UploadRequest.Add name, UploadControl

BoundaryPos=InstrB(BoundaryPos+LenB(boundary),Requ estBin,boundary)

Loop

End Sub


Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function

Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function
Frej är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-06, 23:56 #2
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Varför lägga den som en tempfil innan den skickas iväg till klienten? Ett onödigt steg som bara gör en onödig delay för klienten och lastar ner HDD.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-08, 00:34 #3
Frejs avatar
Frej Frej är inte uppkopplad
Flitig postare
 
Reg.datum: Jul 2004
Inlägg: 463
Frej Frej är inte uppkopplad
Flitig postare
Frejs avatar
 
Reg.datum: Jul 2004
Inlägg: 463
Jo, jag kom på det...
Men problemet är inte det. Det är hur man får in filen i databasen...
Frej är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-08, 23:56 #4
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Får in filen i databasen? Är det optimalt att göra det? Har kört blob som datatyp för många år sedan men har aldrig sett många som gör så.
Om du med säkerhet menar att folk inte ska kunna "surfa fram" bilderna kan du ju ta och döpa om dom till en lång hashkod och endast spara det nya filnamnet i databasen.

Men om du verkligen vill göra som du har tänkt så vette tusan. Inget vanligt scenario direkt...
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-09, 00:12 #5
Helix Helix är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Dec 2003
Inlägg: 2 829
Helix Helix är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Dec 2003
Inlägg: 2 829
Jag kanske inte är den mest erfarna i databaser, har endast använd de till enklare sidor. Dock har jag läst en del och även från ett förnuftigt resonemang måste jag avråda dig att spara bilder i databasen. Det slöar upp en hel del och om det är bilder vi talar om, så kommer dessa att laddas mycket längre tid är fran hårddisken. Gör som ovan nämndes; döp om filen och spara, spara i en mapp och spara namnet i databasen.

/M
Helix är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-08-01, 07:54 #6
Frejs avatar
Frej Frej är inte uppkopplad
Flitig postare
 
Reg.datum: Jul 2004
Inlägg: 463
Frej Frej är inte uppkopplad
Flitig postare
Frejs avatar
 
Reg.datum: Jul 2004
Inlägg: 463
Det hanlar om filer, och anledningen till att jag inte döper till krångliga namn är att jag vill ha en komplett backup av filer när man kör en Databas backup.

Prestandan är inte några som hällst problem. Skulle kunna köra en oändlig loop utan att det skulle slöa ner. (nästan )

[EDIT]
Dessutom är det inte säkert att döpa filer och lägga in dem i konstiga mappnamn.
Frej är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-08-24, 01:09 #7
ZeroKoll ZeroKoll är inte uppkopplad
Hej, jag är ny här.
 
Reg.datum: Aug 2004
Inlägg: 1
ZeroKoll ZeroKoll är inte uppkopplad
Hej, jag är ny här.
 
Reg.datum: Aug 2004
Inlägg: 1
Vad sägs om att du lägger filerna i en privat mapp på en annan plats på hdd:n med ett id-nummer som du sedan sparar i db:n så du kan hitta dem igen och sedananvänder en download-funktion för att tanka ner dem till kunden. Det är ju bara att göra en asp-sida som byter ut Contenttype till det som är lämpligt...har en aspx sida som gör det...det sur ungefär så här...

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + Filename + "\"") ;
Response.Flush();
Response.WriteFile(ConfigurationSettings.AppSettin gs["fileLocation"]+path+"\"+Filename);
Response.End();

Funkar bra för min del men kanske inte för dej. Om du har några frågor så är det bara att ställa dem...
ZeroKoll är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 18:56.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017