Jag tar upp ett problem jag ännu inte lyckats lösa.
Håller på och gör en webbplats där man ska kunna ladda ner filer som ligger i en och samma mapp.
Antalet filer kommer att ändras hela tiden då vissa användare får ladda upp filer.
Problem 1.
Då filerna ofta är i format som pdf och doc så har jag kommit fram till att visa direkta sökvägar till filerna är det bästa (Där användaren väljer "spara som"), för att de inte ska öppnas i webbläsaren.
Samtidigt vill jag uppdatera hur många nedladdningar varje fil fått. Detta genom att antagligen visa den direkta sökvägen till filerna genom ett annat litet fönster för enkelhetens skull.
Men finns det nått sätt att automatiskt påbörja en en spara som-ruta på en doc-fil?
Problem2.
I vilket fall som jag väljer för p1 så vill jag skydda mappen där filerna ligger i med form-authentcation.
Problemet är att jag inte lyckas att säkra mappen de ligger i.
Har lagt en web.config i själva mappen där jag stänger ute alla användare "what-so-ever" just nu, men man kommer ändå åt den.
asp.net skyddar enbart de filer som den anser är dess egna. dvs .aspx, ascx, html etc... till dessa hör alltså inte alla andra filer som doc osv. För att dess ska kollas av aså.net måste man lägga till dem i iis:en som nånging kommer inte ihåg exakt hur, men det är spelar ingen roll eftersom det inte är en bra lösning.
Det är inte en bra lösning därför att då tolkas det av asp.net som en sida som den ska ta hand om. Om du tex försöker skriva ut något i global.asax händelsen begin.request så kommer detta att balla ur documentet. Finns säkert fler saker som ballar det..men det räcker väl med ett exempel för att överbevisa alla :p
Nåja vad då göra..
Förslag ett lägg filerna i en databas och gör logik som skyddar dem.
Förslag två lägg filererna på en ej web-utdelad katalog och gör logik som streamar ut dem till användaren.
Förlag tre gör windows inloggning och låt NTFS styra alla rättigheter. (tyvärr har jag inte lyckats hitta nått sätt att sätta rättigheterna på filerna via koden)
Förslag fyra, skit i min åsikt att det är dåligt att mappa filerna till asp.net.
problem 1
Om du löser ett eller två över så har du löst detta problem osså.
Kanske inte några konkreta kod exempel, men en liten vägledning ivarje fall. :bire
asp.net skyddar enbart de filer som den anser är dess egna. dvs .aspx, ascx, html etc... till dessa hör alltså inte alla andra filer som doc osv. För att dess ska kollas av aså.net måste man lägga till dem i iis:en som nånging kommer inte ihåg exakt hur, men det är spelar ingen roll eftersom det inte är en bra lösning.
Okidoki! Jag testade att lägga in en aspx-fil i den mappen och mina tidigare koder funkade bra där. Dock så stämmer det du säger här ovan och den här lösningen kommer inte att göra det jag ville.
Det enda jag egentligen vill är att filerna inte skall kunna nås genom en vanlig URL samt att de skall laddas ner och inte öppnas i en webbläsare.
Om vi spanar vidare på ditt förslag nr 2 och sparar filerna i en mapp över wwwrooten.
Hur skulle en sådan logik se ut för att användaren ska kunna ta del av filerna?
Ungefär nått i den stilen. Alltså inte så speciellt konstigt.
ps :o
hmm, slog mig just nu att anledningen som jag hade för att inte sätta content typen i IIS påverkar även streamingen som jag har här..men det kanske är lättare att kring gå om man använder streaming. Det går ju att flusha responset innan man påbörjar streamingen etc. :p
Det beror ju på vad användaren har ställt in i sin browser om de får upp spara rutan eller direkt i browsen, men det visste du säkert.
Det finns speciella koder som funkar i IE som går runt användarens inställningar där man kan få upp en "spara som"-ruta på vad som helst.
Det ska tydligen även gå genom ASP men jag vet inte hur bara.
Men jag testar ovanstående snutt och försöker fördjupa mig lite i ämnet.
Man tackar :)
r1: Jag redigerar lite jag me då ;)
Jag har testat koden du skrev ovan samt läst en del om det men lyckas inte riktigt ändå..
r2: Jag lyckas få den kodsnutten att få upp en spara som-ruta för filer som ligger i samma mapp. Kan inte gå utanför mappen tydligen?
Detta gör ju att problemet med att skydda filerna kvarstår.
Visserligen Skulle man kanske kunna lägga ascx-filen som detta körs från i mappen med filerna och sätta authorization på den, samt därefter skapa ett mappnamn som är långt och hemligt.
Inget jag tror jag vill satsa på iofs men hur men har ni några snilleblixtar? :)
Det du kan göra är att sätta endast ScriptSource Access på mappen i IIS Managern (högerklicka på mappen, välj egenskaper, säkerhet på vald mapp). På det viset kan man inte komma runt att ladda ned filerna med direkt url i browsern: http://www.mrwize.nu/bin/guestbook.mdb som exempel men du kommer fortfarande åt dem genom kod
Yupp. Patrik hade tricket jag behövde. Perfa.
Nu har jga kombinerat authorization-forms , inställningar i IIS och attachment.
Enda problemet nu är att det bara funkar i IE.
Det funkar alldeles utmärkt allting i IE i vilket fall som helst men när jag kör i Netscape och Opera så vill det inte riktigt.
[kod]Response.ContentType = "application/unknown"
Response.AddHeader("content-disposition", "attachment; filename=" & Request.QueryString("file"))[kod]
Om jag hoppar över att sätta en contenttype så händer ingenting på sidan.
Om jag däremot skriver dit den så laddar man ner själva sidan.
Alltså filen.ändelse.aspx och allt som står på själv aspx-sidan.
Den verkar inte hitta attachtment-filen.
Det konstiga är dock att det hittar allt den behöver i IE utan problem med exakt samma kod.
Vart ligger skillnaden för att även NS ska ta emot koden?