WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Fysiskt sökväg för File Exists (https://www.wn.se/forum/showthread.php?t=28387)

Pipan 2008-04-05 15:03

Detta rör sig om ASP.NET och handlar om ett och samma konto på Loopia.

Brief:
Jag har där tre stycken mappar, en för varje sida plus adminsidan.

sida1
sida2
sida3
adminsida

Detta är fyra individuella applikationer (antar jag),
och de tre sidorna lades till av Loopia själva, medans adminsidan skapas av mig på följande vis:
I kontrollpanelen på loopia lade jag till en ny subdomän och det skapades då en egen mapp för denna.
Det var så jag blev tillsagd av loopia att göra, när jag eftertrfrågade att få en mapp satt till egen applikation.


Nu till problemet, detta är fyra sidor som jag vill ska dela på samma bildfiler.
Det handlar om webkataloger med produkter som måste vara lika på alla.

Via adminsidan lägger man till och tar bort produkter och detta måste du direkt avspeglas på de tre siterna.

Fram tills nu har jag bara testat, och då haft en egen bildmapp för varje applikation.
För att kontrollera om en bild finns har jag använt FileExtist.

Men nu behöver jag alltså "förena" dessa fyra siters bilder och tänkte mig då att skapa en bildmapp i FTP-root,
dvs på samma nivå alla mina applikationer ligger:

sida1
sida2
sida3
adminsida
bilder <---

Men hur ska jag då kunna använda FileExist från var och en av dessa applikationer, mot en fil som kommer ligga utanför själva applikationen?

Tack för svar, om det finns andra bättre lösningar hör jag även dem.

nomicon 2008-04-05 15:27

Ange filsystemets sökväg till bilden, typ if FileExist(../bilder/image.jpg) ?

/Martin

Westman 2008-04-05 16:36

Förutsatt att de (Loopia) tillåter Parent Paths så borde det funger bra med "../".

Pipan 2008-04-05 17:19

Nix det verkar inte så,

Citat:

System.Web.HttpException: Cannot use a leading .. to exit above the top directory.
Använde detta (då jag måste gå upp två steg, public_html inkluderad):
Kod:

Response.Write(HttpContext.Current.Request.MapPath("../../pics"));
Är det helt kört nu, eller finns det något sätt alls att lösa det på?

etanders 2008-04-05 17:31

Kanske inte alls bästa sättet att lösa det på, men kan du inte ha en databastabell där du sparar sökväg/filnamn och ev. annan lämplig info för dina bilder. Istället för att använda FileExist kan du då kolla i databasen och den bild du söker finns, och då plocka ut sökväg/filnamn därifrån. (Förutsatt att du kan nå denna databas från samtliga applikationer, men det borde väl inte vara något problem.)

Pipan 2008-04-05 17:52

Ok, hinner dessvärre inte gör mycket omkodningar.

Vet någon ett webhotell som tillåter detta?

Allmänt irriterad på Loopia nu där t.ex alla filer cachas på deras server,
så änfringar syns ej förrän lång tid efteråt, man måste dessutom manuellt starta om asp.net-tjänsten för varje ny fil eller ändring, men inte ens detta brukar hjälpa.

totoo 2008-04-07 00:54

Pipan, är du säker på att det inte är hos dig det cachas? Jag vet ju inget om din kompetensnivå, men jag har aldrig sett att loopia skulle cacha material på det där sättet.

Angående det där med att använda "../" mellan subdomäner ska vad jag vet inte gå, eftersom den där katalogstrukturen är rätt virtuell så att säga. Du gör nog bäst i att använda absoluta sökvägar i det fallet.

EmilIsberg 2008-04-07 13:39

Citat:

Originally posted by Pipan@Apr 5 2008, 15:03
Nu till problemet, detta är fyra sidor som jag vill ska dela på samma bildfiler.
Det handlar om webkataloger med produkter som måste vara lika på alla.

Via adminsidan lägger man till och tar bort produkter och detta måste du direkt avspeglas på de tre siterna.
...
Men hur ska jag då kunna använda FileExist från var och en av dessa applikationer, mot en fil som kommer ligga utanför själva applikationen?

"Parent Path" är inte tillåtet hos oss och det går alltså inte att använda relativa sökvägar i ASP.NET.
Det vi rekommenderar är att man istället gör något liknande följande:
Kod:

        strFullPath = Server.MapPath("")
        While strFileName.IndexOf("..") > -1
  strFileName = strFileName.SubString(3)
  strFullPath = strFullPath.SubString(0,strFullPath.LastIndexOf("\"))
        End While
        strFullPath = strFullPath & "\" & strFileName

Då kan strFileName vara exempelvis filename.txt, ../filename.txt, ../../bilder/filename.txt.

Den tar fram nuvarande sökväg från Server.MapPath och för varje ".." i strFileName tas en katalog bort från slutet av strFullPath.

Det jag misstänker fungerar ännu bättre för dig är följande:
Kod:

        strFullPath = Server.MapPath("/")
        For intCount = 1 To 2
  strFullPath = strFullPath.SubString(0,strFullPath.LastIndexOf("\"))
        Next
        strFullPath = strFullPath & "\" & strFileName

Då kan strFileName vara exempelvis "bilder/filename.txt".

Naturligtvis kan du även använda absoluta sökvägar.

EmilIsberg 2008-04-07 13:52

Citat:

Originally posted by totoo@Apr 7 2008, 00:54
Pipan, är du säker på att det inte är hos dig det cachas? Jag vet ju inget om din kompetensnivå, men jag har aldrig sett att loopia skulle cacha material på det där sättet.

Det som Pipan hänvisar till är cachandet av ASP.NET-applikationer som finns beskrivet i tråden
http://www.webmasternetwork.se/index...T&f=13&t=25203

Pipan 2008-04-19 22:31

Nejdu Emil.

Din lösning verkar inte fungera. Hur jag än gör kommer jag inte högre än den subdomän-mapp jag kör den ifrån.

Det verkar totalt omöjligt att lösa, vilket gör mig mkt förvånad.


Alla tider är GMT +2. Klockan är nu 22:33.

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