mercredi 13 août 2008

ASP.NET 2.0: Upload de fichiers

L'upload de fichiers en asp.net 2.0 peut se faire facilement grâce au contrôle FileUpload.

Dans l'exemple suivant, j'effectue un upload d'images vers un emplacement spécifique, qui est le chemin d'une 2ème application.

Création du dossier:

Je commence par créer un dossier dans l'emplacement voulu. ce dossier contiendra mes images.

    <asp:LabelID="lblMessage"runat="server"ForeColor="Red"></asp:Label>
    <
br />
    <
table>
        <
tr> <td>
                <
asp:LabelID="Label3"runat="server"Text="Chemin de l'application :">
                </
asp:Label>
            </
td>
            <
td>
                <
asp:TextBox ID="txtApplicationPath"runat="server"Width="223px"
                  
ValidationGroup="Val1"></asp:TextBox>
                <
asp:RequiredFieldValidator ID="RequiredFieldValidator1"runat="server"
                  
ControlToValidate="txtApplicationPath"
                  
ErrorMessage="Entrez le chemin de l'application"ValidationGroup="Val1">
                </
asp:RequiredFieldValidator>
            </
td>
        </
tr>
        <
tr>
            <
td>
                <
asp:LabelID="Label1"runat="server"Text="Nom du Dossier :"></asp:Label>
            </
td>
            <
td>
                <
asp:TextBox ID="txtFolderName"runat="server"Width="221px"
                  
ValidationGroup="Val1"></asp:TextBox>
                <
asp:RequiredFieldValidator ID="RequiredFieldValidator2"runat="server"
                  
ControlToValidate="txtFolderName"ErrorMessage="Entrez le nom du dossier"ValidationGroup="Val1">
                </
asp:RequiredFieldValidator>
            </
td>
        </
tr>
        <
tr>
            <
td>
              
&nbsp;</td>
            <
td>
                <
asp:ButtonID="cmdCreateFolder"runat="server"onclick="cmdCreateFolder_Click"
                  
Text="Créer le dossier"Width="279px"ValidationGroup="Val1" />
            </
td>
        </
tr>

C#

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//indication du chemin de la 2eme application
txtApplicationPath.Text = "C:\\DEV\\MyBook\\img";
}

}

protected void cmdCreateFolder_Click(object sender, EventArgs e)
{
string path = @txtApplicationPath.Text + "\\" + txtFolderName.Text;

try
{
if (Directory.Exists(path))
{
lblMessage.Text = "Le dosser" + path + " existe déjà. Veuillez choisir un nom different.";
return;
}

// création du dossier
DirectoryInfo di = Directory.CreateDirectory(path);
lblMessage.Text = "Le dossier " + txtFolderName.Text + " a été créé avec succès";
}
catch (Exception ex)
{
lblMessage.Text = "Echec lors de la création du dossier : " + ex.ToString();
}

}


Le dossier saisi dans "Nom du dossier" sera créé dans l'emplacement "Chemin de l'application".

En Form_Load, je précise le chemin de l'application. La meilleure manière de spécifier ce chemin est de l'enregistrer dans une base de données afin de pouvoir eventuellement le mettre à jour si necessaire, sans avoir à revenir au code.



Upload d'images:


Voici une implémentation de l'utilisation du contrôle FileUpload:

<table>
<
tr>
<
td style="width: 146px">
<
asp:Label ID="Label2" runat="server" Text="Images :"></asp:Label>
</
td>
<
td>
<
asp:FileUpload ID="FileUpload1" runat="server" Width="217px" />&nbsp;<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="FileUpload1" Display="Dynamic"
ErrorMessage="Selectionnez une image" ValidationGroup="Val2"></asp:RequiredFieldValidator>&nbsp;
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="FileUpload1" Display="Dynamic"
ErrorMessage="Fichiers jpg, gif ou png uniquement"
ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.jpg|.gif|.png)$"></asp:RegularExpressionValidator>
</td>
</
tr>
<
tr>
<
td style="width: 146px">
&nbsp;</td>
<
td>
<
asp:Button ID="cmdAddPhoto" runat="server" OnClick="cmdAddPhoto_Click" Text="Ajouter"
Width="282px" ValidationGroup="Val2" />
</
td>
</
tr>
</
table>



Le contrôle RegularExpressionValidator est utilisé afin de contrôler le type du fichier selectionné par l'utilisateur. Ici je limite l'upload aux fichiers jpg, gif et png.



C#

protected void cmdAddPhoto_Click(object sender, EventArgs e)
{
try
{
FileUpload1.SaveAs(@txtApplicationPath.Text + "\\" + txtFolderName.Text + "\\" + "changedname.jpg");
lblMessage.Text = "Photo ajoutée";

}
catch (Exception ex)
{
lblMessage.Text = "Echec lors de l'ajout de la photo : " + ex.ToString();
}
}

Aucun commentaire: