[.net] CreateDirectory

Pagina: 1
Acties:

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Voor een uploadfunctie in mijn applicatie, maak ik gebruik van erg simpele code :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    Private Sub btnUpload_Click(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles btnUpload.Click
        Dim strFileName As String
        Dim strFilePath As String
        Dim strFolder As String

        ''maak folder test aan in map Uploads
        strFolder = Server.MapPath("") + "\Uploads\test\"

        'Get the name of the file that is posted.
        strFileName = oFile.PostedFile.FileName
        strFileName = Path.GetFileName(strFileName)

        'Create the directory if it does not exist.
        If (Not Directory.Exists(strFolder)) Then
            Directory.CreateDirectory(strFolder)
        End If

        'Save the uploaded file to the server.
        strFilePath = strFolder & strFileName

        If File.Exists(strFilePath) Then
            lblUploadResult.Text = strFileName & " already exists on the server!"
        Else
            oFile.PostedFile.SaveAs(strFilePath)
            lblUploadResult.Text = strFileName & " has been successfully uploaded."
        End If

        'Display the result of the upload.
        frmConfirmation.Visible = True
    End Sub


Nu bleek deze manier niet te werken, en kreeg ik een errormelding :
Could not find a part of the path E:\

Zoeken op internet leverde op dat het te maken had met de securityinstellingen van de host. De mail die ik daarover terug ontving

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
ik heb deze pagina enige tijd zitten testen ... 
blijkbaar moet de user waaronder de application pool 
voor die site draait op de volledige "weg" tot de folder read rechten hebben ... 
(en trouwens ook o.a. op de root van de system paritition)

-maar-

ik wens dit soort van rechten _niet_ op onze webservers in te stellen ... 
(dit is een breekpunt)

misschien dat microsoft vroeg of laat wel eens een asp.net versie uitbrengt 
die _redelijke_ permissions vereist voor het simpelweg uploaden van een file
of het aanmaken van een folder ;-)


Aan de ene kant kan ik de provider wel begrijpen. Ik ben nu op zoek naar een work-around. Wat raden jullie aan ?

[ Voor 7% gewijzigd door Tinuske op 27-08-2004 10:24 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Ik zou al beginnen met het opbouwen van m'n path door middel van de Path.Combine method, ipv met string concatenation te werken.

Ik ben niet zo zeker dat het met security-instellingen te maken heeft, want .NET 1.1 heeft die permissies niet nodig:
In version 1.1, it's not necessary for the NetworkService/ASPNET user to be able to read up to the drive root.

https://fgheysels.github.io/


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Het programma loopt vast op de createdirectory functie van system.io voor de asp.net gebruiker. Zoeken op internet levert op dat de asp.net gebruiker read rechten nodig zou hebben vanaf de root ( zo lees ik het in o.a. de nieuwsgroepen). Kennelijk is dat dan toch vanaf 1.1 opgelost ?

path.combine is wel een verbetering van de code, maar levert niet het gewenste resultaat op.

nog steeds :

code:
1
2
3
4
5
6
7
8
9
10
[DirectoryNotFoundException: Could not find a part of the path "E:\".]
   System.IO.__Error.WinIOError(Int32 errorCode, String str) +287
   System.IO.Directory.InternalCreateDirectory(String fullPath, String path) +489
   System.IO.Directory.CreateDirectory(String path) +195
   WebApplication11.WebForm1.btnUpload_Click(Object sender, EventArgs e)
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1277

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Is het mischien een mapped network drive? Ik heb daar ooit ook eens problemen mee gehad. Ik ben nou niet thuis dus kan niet precies opzoeken wat het probleem was.

Het probleem dat je tot de root rechten moet hebben is volgens mij idd opgelost in .net 1.1

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 22-05 10:39

dotcode

///\00/\\

Je moet je asp.net user wel de juiste rechten geven op je e:\ schijf. Standaard heeft hij namelijk die rechten niet.

  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Heb zojuist een mailtje terug ontvangen van mijn provider:

* De e: blijkt geen mapped network drive te zijn, maar gewoon een physical disk
* Framework 1.1 is geinstalleerd

@dotcode
Welke rechten heeft de asp.net account dan nodig op welke mappen ?
rechten vanaf de root zijn vanaf framework 1.1 zoals je hierboven kunt lezen niet meer nodig vanaf de root

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
code:
1
strFolder = Server.MapPath("") + "\Uploads\test\"

Dit geeft waarschijnlijk een absoluut pad?
Misschien moet je eens een relatief pad proberen...

(of test eerst eens of je wel directories kan aanmaken in je werkdirectory)

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Kan je ook niets met die ~ notatie forceren ?

https://fgheysels.github.io/


  • Tinuske
  • Registratie: September 2002
  • Laatst online: 08-02 20:43
Hij loopt hier dus op fout :

code:
1
2
3
4
5
strFolder = Server.MapPath("./Uploading/Test5")
        'Create the directory if it does not exist.
        If (Not Directory.Exists(strFolder)) Then
            Directory.CreateDirectory(strFolder)  //hier gaat ie de mist in
        End If


Ik heb ook al geprobeerd
relatief pad : strFolder = ("Uploading/Test5")
~-ervoor : strFolder = ("~/Uploading/Test5")

maar krijg dan de foutmelding :
Access to the path "~/Uploading/Test6/" is denied.
(ik test dit lokaal en de rechten staan goed)

server.mappath("./Uploading/Test5") geeft trouwens terug :
"E:\www\websiteadres\testapplicatie\Uploading\Test5"

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Lukt het wel om een System.IO.Directory.GetFiles() of System.IO.Directory.GetDirectories() uit te voeren? Mischien heb je gewoon geen rechten om een directory te createn.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1