Announcement

Collapse
No announcement yet.

HtmlInputFile .NET

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • HtmlInputFile .NET

    Hallo

    ich möchte gerne eine Datei vom Client an den Server uploaden dafür habe ich ein Beispiel geschrieben .
    Mithilfe des HtmlInputFile-Control kann ich ein File auf dem Client aussuchen. Wenn ich aber dieses File auf dem Server speichern möchte bekomme ich den fehler eine ungültigen Seite .
    Warum ? oder wie kann ich das besser machen ?

    hier meine Quelle

    <
    <%@ Page Language="c#" Debug="true" Codebehind="WebForm1.pas"
    AutoEventWireup="false" Inherits="WebForm1.TWebForm1"%>
    &lt;
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    &lt;
    <html>
    <head>
    <title></title>
    </head>
    <body ms_positioning="GridLayout">
    <form enctype="multipart/form-data" runat="server"><input
    id="MyFile"
    style="Z-INDEX: 1; LEFT: 70px; POSITION: absolute; TOP: 30px"
    type="file" name="MyFile" runat="server">
    <input id="Buttonxy"
    style="Z-INDEX: 3; LEFT: 366px; POSITION: absolute; TOP: 30px"
    onclick="Button1_Click" type="submit" value="Button"
    runat="server">
    </form>
    </body>
    </html>
    &gt;

    unit WebForm1;

    interface

    uses
    System.Collections, System.ComponentModel,
    System.Data, System.Drawing, System.Web, System.Web.SessionState,
    System.IO, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls;

    type
    TWebForm1 = class(System.Web.UI.Page)
    {$REGION 'Vom Designer verwalteter Code'}
    strict private
    procedure InitializeComponent;
    {$ENDREGION}
    strict private
    procedure Page_Load(sender: System.Object; e: System.EventArgs);
    strict protected
    MyFile: System.Web.UI.HtmlControls.HtmlInputFile;
    Buttonxy: System.Web.UI.HtmlControls.HtmlInputButton;
    procedure OnInit(e: EventArgs); override;
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    procedure Button1_Click(sender: System.Object; e: System.EventArgs);

    end;

    implementation

    {$REGION 'Vom Designer verwalteter Code'}
    /// <summary>
    /// Erforderliche Methode zur Unterstützung des Designers --
    /// ändern Sie die Methode nicht mit dem Quelltext-Editor
    /// </summary>
    procedure TWebForm1.InitializeComponent;
    begin
    Include(Self.Load, Self.Page_Load);
    end;
    {$ENDREGION}

    procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
    begin
    // TODO: Hier Anwendercode zum Initialisieren der Seite einfügen
    end;

    procedure TWebForm1.OnInit(e: EventArgs);
    begin
    //
    // Erforderlich zur Unterstützung des Designers
    //
    InitializeComponent;
    inherited OnInit(e);
    end;

    procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
    var UFile : HttpPostedFile;
    begin
    UFile := MyFile.PostedFile;
    UFile.SaveAs('c:\upload\test');
    end;

  • #2
    Hallo,

    nachfolgende liste ich einmal die häufigsten Fehlerursachen auf:
    <br>
    a) Wenn dieses Control verwendet werden soll, muss die Web Form-Eigenschaft Enctype auf <b>multipart/form-data</b> gesetzt werden.
    <br>

    b) In der Voreinstellung (machine.config) wird die Dateigröße der hochladbaren Datei auf <b>4 MByte</b> begrenzt, dieser Wert kann in Form der Einstellung <b>maxRequestLength</b>="4096" im <httpRuntime>-Abschnitt geändert werden. Außerdem kann es bei lange andauernden Vorgängen zu einem Timeout kommen, da der Wert für <b>responseDeadlockInterval</b> der machine.config standardmäßig bei 3 Minuten liegt.
    <br>
    c) Wenn auf dem IIS auch das Microsoft-Tool URLScan installiert wurde (IIS Lockdown Tool), greift die Beschränkung <b>ContentLenght</b> von 2 MB. Diese Grenze muss in der INI-Datei im Eintrag <b>MaxAllowedContentLength</b> erhöht werden.
    <br>
    Das folgende C#-Beispiel demonstriert, die die hochgeladene Datei direkt in einer Datenbank gespeichert wird:
    <pre>
    <b>string</b> sDotName = <font color="#9933CC">&quot;default.dot&quot;</font>;
    <b>if</b> (File1.PostedFile != <b>null</b>)
    {
    <font color="#003399"><i>// Dateigröße der ausgewählten DOT-Datei bestimmen </i></font>
    <b>int</b> iBLObLen = <b>this</b>.File1.PostedFile.ContentLength;
    <b>byte</b>[] aData = <b>new</b> <b>byte</b>[iBLObLen];
    <b>this</b>.File1.PostedFile.InputStream.Read(aData, 0, iBLObLen);
    <font color="#003399"><i>// vollständigen Pfad so aufplitten, dass der DOT-Dateiname übrigbleibt</i></font>
    <b>string</b>[] sItems;
    System.Text.RegularExpressions.Regex aRX = <b>new</b> System.Text.RegularExpressions.Regex(@<font color="#9933CC">&quot;\\&quot;</font>);
    sItems = aRX.Split(<b>this</b>.File1.PostedFile.FileName);
    <b>foreach</b>(<b>string</b> sItem <b>in</b> sItems)
    {
    sDotName = sItem;
    }
    <b>this</b>.sqlConnectionTest.Open();
    ....
    </pre&gt

    Comment

    Working...
    X