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)
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?
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...
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...
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)