none
Dateien aus MS SQL-Server 2000 image-Datentyp mit APS.Net vb 20005 auslesen, als Datei speichern und öffnen. RRS feed

  • Frage

  • Das Ein- und Auslesen der Dateien funktioniert auf meinem Entwicklerarbeitsplatz ohne Probleme. Veröffentlicht auf einem MS IIS 6.0-Server und als Webseite aufgerufen werden die Dateien nicht im angegebenen Verzeichnis abgelegt.

    Hier mein VB-Code:

     

    Public Sub SaveBlobAsFile()

     

    If Directory.Exists("c:\Validierungsdatenbank") Then

     

    Me.Meldung.Text = "Verzeichnis Validierungsdatenbank war angelegt!"

     

    Else

     

    Me.Meldung.Text = "Verzeichnis Validierungsdatenbank war nicht angelegt!"

    Directory.CreateDirectory(

    "c:\Validierungsdatenbank")

     

    End If

     

     

    Dim commGetBlob As New SqlCommand("Select Dokument from Dokumentenspeicher where ID=" & GridView1.Rows(GridView1.SelectedIndex).Cells(1).Text, m_conn)

     

    Dim commGetPfad As New SqlCommand("Select DokBezeichnung from Dokumentenspeicher where ID=" & GridView1.Rows(GridView1.SelectedIndex).Cells(1).Text, m_conn)

     

    Dim fs As Stream

     

    Try

    m_conn.Open()

     

    'Explizite Konvertierung von Object zu Byte()

     

    Dim arrGetBlob() As Byte = CType(commGetBlob.ExecuteScalar(), Byte())

     

    Me.Meldung.Text = "c:\Validierungsdatenbank\" & Convert.ToString(commGetPfad.ExecuteScalar())

    fs =

    New FileStream("c:\Validierungsdatenbank\" & Convert.ToString(commGetPfad.ExecuteScalar()), FileMode.OpenOrCreate, FileAccess.Write)

     

    Dim bw As New BinaryWriter(fs)

    bw.Write(arrGetBlob)

    bw.Flush()

    bw.Close()

    arrGetBlob =

    Nothing

    bw =

    Nothing

     

    ''***Start eines Prozesses und warten auf den Abschluá********

     

    'Dim procID As Integer

     

    'Dim newProc As Diagnostics.Process

     

    'newProc = Diagnostics.Process.Start("c:\Validierungsdatenbank\" & Convert.ToString(commGetPfad.ExecuteScalar()))

     

    'procID = newProc.Id

     

    'newProc.WaitForExit()

     

    'Dim procEC As Integer = -1

     

    'If newProc.HasExited Then

     

    ' procEC = newProc.ExitCode

     

    'End If

     

    ''MsgBox("Process with ID " & CStr(procID) & _

     

    '' " terminated with exit code " & CStr(procEC))

     

    ''MsgBox("BLOB in Datei gespeichert.")

     

    Catch ex As DirectoryNotFoundException

     

    If CBool(InStr(ex.Message, "konnte nicht gefunden werden", CompareMethod.Text)) Then

     

    Me.Meldung.Text = ex.Message

     

    End If

     

    Catch ex As Exception

     

    Me.Meldung.Text = ex.Message

     

    Finally

    m_conn.Close()

    fs =

    Nothing

    GC.Collect()

     

    End Try

     

    End Sub

    Mittwoch, 27. Mai 2009 12:51

Antworten

  • ASP.NET läuft immer am Server, am Client kannst Du da (zum Glück) nichts machen.

    Chris
    • Als Antwort markiert Forenteam Donnerstag, 28. Mai 2009 14:56
    Donnerstag, 28. Mai 2009 14:38

Alle Antworten

  • Hast Du denn dem ASPNET-Account Zugriffsrechte für c:\Validierungsdatenbank\ eingeräumt?
    Mittwoch, 27. Mai 2009 13:23
  • Hallo Moderator,

    danke für deine Antwort. Falls ein ASPNET - Account nicht auf dem XP-PC angelegt ist, welche Schritte müßte ich durchführen?

    Einfach nur den Benutzer anlegen, reicht ja denke ich nicht aus.

    Frank Schäfer
    Mittwoch, 27. Mai 2009 14:36
  • Von Anfang an:

    (a) Das Verzeichnis wird erfolgreich erstellt?
    (b) Aus dem Catch Block tauchen keine Exception Meldungen auf?
    (c) Es kommt auch keine Unhandled Exception?

    Chris
    Mittwoch, 27. Mai 2009 17:06
  • Hallo Chris,

    zu a.
    Das Verzeichnis wird auf dem Entwickler-PC erstellt auf dem externen XP-PC nicht.

    zu b.
    keine.

    zu c.
    keine.

    Frank
    Donnerstag, 28. Mai 2009 09:01
  • Directory.CreateDirectory läuft, erzeugt das Verzeichnis nicht, aber liefert dennoch keine Exception? Das glaub' ich jetzt aber nicht.

    Chris
    Donnerstag, 28. Mai 2009 13:41
  • Hallo Frank,

    nur damit wir uns richtig verstehen:
    1) Der "XP-PC" ist der mit dem angesprochenen IIS?
    2) Du erwartest nicht, dass auf einem dritten PC (nennen wir ihn "VISITOR"), von dem aus die Webseite im Browser abgerufen wird, irgendein Verzeichnis erstellt würde?

    Richtig?
    Donnerstag, 28. Mai 2009 13:57
  • Hallo Moderator,

    ich nahm eigentlich deine Nummer 2) an.

    Ich experimentiere im Augenblick mit Identitätswechsel in ASP.Net.

    Vieleicht bringt das die Lösung.

    Frank
    Donnerstag, 28. Mai 2009 14:15
  • ASP.NET läuft immer am Server, am Client kannst Du da (zum Glück) nichts machen.

    Chris
    • Als Antwort markiert Forenteam Donnerstag, 28. Mai 2009 14:56
    Donnerstag, 28. Mai 2009 14:38
  • Hallo Chris,

    danke für den Schubs in die richtige Richtung.

    Mit den entsprechenden Rechten werden die Dateien auf dem Server temporär abgelegt. Ich werde Sie von dort aus öffnen.

    Frank
    Donnerstag, 28. Mai 2009 14:53
  • Pass auf - mehrere Personen können Dateien gleichzeitig anfordern. Sprich die Dateinamen sollten erstens nicht kollidieren, zweitens wenn es persönliche Dateien sind: aufpassen daß die Dateinamen nicht für andere Personen geraten werden können (zB Hashes verwenden)

    Chris
    Donnerstag, 28. Mai 2009 16:49