Da qualche giorno è ormai disponibile la nuova versione di Delphi e C++ con enormi novità tecnologiche rispetto alle precedenti. Questa nuova versione codename “Tiburon” migliora drasticamente le performance dell’IDE e del compilatore/parser,tra le novità più ecclatanti vi sono :
Supporto ai generics (Tlist)
Completo supporto a Unicode
DataSnap completamente nuovo basato sullo std JSON per la comunicazione.
Attualmente alla lista delle cose che mi attendevo ne manca una non di poca importanza cioè Delphi2009 for DotNet , che sul sito di Embacadero non trovo nemmeno nella RoadMap… Ogni volta che vedo delle cose del genere mi torna in mente lo spettro di Kylix e delle aziende che vi ci avevano investito sopra!!.
Cosa molto carina invece è la possibilità di provare (cacchio solo per 14gg) le versioni trial del prodotto Enterprise scaricandole direttamente da Embarcadero all’indirizzo :
http://cc.codegear.com/free/delphi oppure http://cc.codegear.com/free/cppbuilder
la procedura di intallazione e richiesta dei codici questa volta è veramente smart e come dicono dalle mie parti veramente “sbattimento zero!”.
Domani a Milano vi sarà la presentazione di questi nuovi bei prodotti e ovviamente Synaptica andrà a far visita e porterà con sè qualche news …
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" %>
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-
<html>
-
<head>
-
<title></title>
-
<meta name="GENERATOR" content="Borland Package Library 7.1">
-
</head>
-
-
<body ms_positioning="GridLayout">
-
<form id=Form1 method=post enctype="multipart/form-data" runat="server">
-
<input id=MyFile type=file runat="server"><br>
-
<input type=submit value="Invia query">
-
<asp:textbox id=TextBox1
-
style="Z-INDEX: 1; LEFT: 14px; POSITION: absolute; TOP: 86px"
-
runat="server" height="93" width="691px" textmode="MultiLine">
-
</asp:textbox>
-
<asp:image id=Image1
-
style="Z-INDEX: 2; LEFT: 118px; POSITION: absolute; TOP: 214px"
-
runat="server" height="211px" width="243px">
-
</asp:image>
-
</form>
-
</body>
-
</html>
-
La riga di ns interesse è :
-
"<input id=MyFile type=file runat="server">"
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’}
-
/// <summary>
-
/// Required method for Designer support — do not modify
-
/// the contents of this method with the code editor.
-
/// </summary>
-
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 ….
Ultimi commenti
RSS