Delphi for DotNet – WebForm per fare l’upload di un file
COME CREARE UNA PAGINA PER ESEGUIRE GLI UPLOAD CON ASP.NET IN DELPHI PER .NET
A differenza del caro e buon veccio Asp in cui creare una pagina di upload era simile ad un parto, nel nuovo ambiente .Net di Microsoft la cosa è resa molto più semplice grazie all’introduione della classe : System.Web.UI.HtmlControls.HtmlInputFile.
In questo esempio viene creata una pagina ASP.Net da inserire nel vs. progetto per poter permettere agli utenti di eseguire un upload di un file.
Come ben sapete una pagina ASP.Net in delphi 8.0 costituita dal relativo file .aspx e dal code behind contenuto nella dll del progetto. Il “code behind” viene generato in funzione del file della pagina .pas (scritto nel classico object pascal).
Analizziamo cosa dobbiamo inserire nel file .aspx nel nostro caso la pagina l’ho chiamata wf_upload_file.aspx che contiene il codice :
<%@ Page language="c#" Debug="true" Codebehind="wf_upload_file.pas" AutoEventWireup="false" Inherits="wf_upload_file.Twf_upload_file" %>
La riga di ns interesse è :
""
dove l’interprete .Net crea un oggetto il cui nome è “MyFile” questo oggetto fa parte della classe : System.Web.UI.HtmlControls.HtmlInputFile.
La parte di “code behind” il file wf_upload_file.pas :
unit wf_upload_file;
interface
uses
System.Collections, System.ComponentModel,
System.Data, System.Drawing, System.Web, System.Web.SessionState,
System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls;
type
Twf_upload_file = class(System.Web.UI.Page)
{$REGION 'Designer Managed Code'}
strict private
procedure InitializeComponent;
{$ENDREGION}
strict private
procedure Page_Load(sender: System.Object; e: System.EventArgs);
strict protected
TextBox1: System.Web.UI.WebControls.TextBox;
MyFile : System.Web.UI.HtmlControls.HtmlInputFile;
Image1: System.Web.UI.WebControls.Image;
procedure OnInit(e: EventArgs); override;
private
public
{ Public Declarations }
end;
implementation
uses borland.vcl.sysutils;
{$REGION 'Designer Managed Code'}
///
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
///
procedure Twf_upload_file.InitializeComponent;
begin
Include(Self.Load, Self.Page_Load);
end;
{$ENDREGION}
procedure Twf_upload_file.Page_Load(sender: System.Object; e: System.EventArgs);
begin
// TODO: Put user code to initialize the page here
If filMyFile.PostedFile <> nil then
Begin
TextBox1.Text := ' non nullo ';
TextBox1.Text := TextBox1.Text + MyFile.PostedFile.FileName + #10#13;
TextBox1.Text := TextBox1.Text + 'dimensione : ' + Int64(filMyFile.PostedFile.ContentLength).ToString + #10#13;
filMyFile.PostedFile.SaveAs('C:\Inetpub\wwwroot\mio_progetto\up_img\' + ExtractFileName(filMyFile.PostedFile.FileName));
Image1.ImageUrl := 'up_img/' + ExtractFileName(MyFile.PostedFile.FileName);
End
Else
Begin
End;
end;
procedure Twf_upload_file.OnInit(e: EventArgs);
begin
//
// Required for Designer support
//
InitializeComponent;
inherited OnInit(e);
end;
end.
Da notare l’obbligatorietà della dichiarazione dell’oggetto MyFile all’interno della classe che definisce la pagina, che non avviene in automatico, anche se dovrebbe delphi 8.0 riconoscere tutti gli oggetti definiti nella pagina .aspx e mantenerne l’allineamento con il .pas. Nell’evento Page_Load viene implementato il codice per salvare il file inviato dall’utente in una posizione del disco.
Ho aggiunto l’uso della libreria uses borland.vcl.sysutils; s per poter accedere alla funzione ExtractFileName della vcl semplicemente perchè non conosco la funzione che esegue le stesse cose nel .Net framework.
Spero che l’articolo sia comprensibile, l’ho effettivamente scritto un po di fretta.
Ciao a tutti
Ivan ….