webForumDet fria alternativet

Bilduppladdning, säkerhetsfel

.NET

8 svar · 582 visningar · startad av k0ffe

Medlem sedan maj 2003352 inlägg
Frågan#1

Hej!

Jag har en funktion för bilduppladdning där jag stöter på ett säkerhetsfel.
Det hela fungerar bra lokalt, men när jag kör det över ett webbhotell får jag följande fel:

Security Exception 
Description: The application attempted to perform an operation not allowed by the security policy.  To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file. 

Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

Source Error: 
				
Line 112:                    Dim image As System.Drawing.Image = System.Drawing.Image.FromFile(userPostedFile)

"filePicture" är input-fältet för uppladdning
Detta är ett urklipp av koden som körs vid postning:

Dim userPostedFile As String = filePicture.PostedFile.FileName ' Uppladdad fil

                    ' Nytt filnamn 
                    Dim GUID As String = System.Guid.NewGuid().ToString()

                    ' Sökväg för bild
                    Dim filePath As String = "../Img/page/" & GUID & ".jpg"	
					
					
                    Dim image As System.Drawing.Image = System.Drawing.Image.FromFile(userPostedFile)

Jag har skrivrättigheter på mappen, har testat:

filePicture.PostedFile.SaveAs(server.mappath("../Img/page/" & GUID & ".jpg"))

... vilket fungerar bra.

Någon som vet vad felet är?

Medlem sedan feb. 2005280 inlägg
#2

Har för mig att net använder nån temp katalog för att temporärt lagra filen där först, kan vara det som kapsejsar

Medlem sedan maj 20012 812 inlägg
#3
Dim userPostedFile As String = filePicture.PostedFile.FileName ' Uppladdad fil
                    ' Nytt filnamn 
                    Dim GUID As String = System.Guid.NewGuid().ToString()
                    ' Sökväg för bild
                    Dim filePath As String = "../Img/page/" & GUID & ".jpg"	
                    Dim image As System.Drawing.Image = System.Drawing.Image.FromFile(userPostedFile)

Du försöker hämta en fil från din mapp, men du har inte spara ner filen än, finns verkligen filen där?

- M

Medlem sedan maj 2003352 inlägg
#4

Nej, den finns inte där än eftersom jag först vill beskära och komprimera bilden innan jag sparar den.

Varför fungerar det lokalt, men inte publicerat? Förvirrad!

Medlem sedan maj 20012 812 inlägg
#5

k0ffe skrev:

Nej, den finns inte där än eftersom jag först vill beskära och komprimera bilden innan jag sparar den

Men varför iallvärlden försöker du hämta bilden från en file om den inte finns där?

k0ffe skrev:

Varför fungerar det lokalt, men inte publicerat? Förvirrad!

För att du garanterat kör som Administrator på din maskin och därmed får lova att göra saker som du inte får i den skarpa miljön. Men du borde få ett fel även i din egen miljö om att filen inte finns när du försöker ladda den från disk, den finns ju inte där...

- M

Medlem sedan maj 2003352 inlägg
#6

Gladh skrev:

Men varför iallvärlden försöker du hämta bilden från en file om den inte finns där?

Jo jag har ju bläddrat fram bilden i min file-input innan jag postar.
Men det behövs en sökväg till en fil på servern istället alltså?

Gladh skrev:

Men du borde få ett fel även i din egen miljö om att filen inte finns när du försöker ladda den från disk, den finns ju inte där...

Det fungerar hur bra som helst!

Då behöver jag först spara filen, och sedan köra denna kod? Det jag vill slippa är ju att spara en fil på, låt säga, 350 kB. Den ska komprimeras/beskäras, och sedan sparas...

Medlem sedan juni 20019 024 inlägg
#7

System.Drawing.Image.FromFile(filename) är till för filer på servern. Det fungerar förmodligen eftersom klient och server är samma maskin på din egen dator.

Använd System.Drawing.Image.FromStream(stream) för att hämta från egenskapen HttpPostedFile.InputStream.

Alltså:

Dim i As System.Drawing.Image = System.Drawing.Image.FromStream(filePicture.PostedFile.InputStream)
Medlem sedan maj 2003352 inlägg
#8

Grymt! Fungerar hur bra som helst!

TACK!

Medlem sedan maj 20012 812 inlägg
#9

pace skrev:

Det fungerar förmodligen eftersom klient och server är samma maskin på din egen dator.

Aaaaahhh, så trög jag är, klart som sören att det fungerar på hans maskin, han får ju samma sökväg till filen som den han laddar upp...

- M

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)