J'ai post� ce sujet �galement dans le forum ASP.NET, ne sachant pas si ce forum traitait uniquement les sujets concernant le framework ASP.NET AJAX (AJaxControlToolKit)
Bonjour,
Je souhaite r�ussir � t�l�charger (upload) un fichier sur un serveur en utilisant ASP.NET / AJAX / JQuery.
Un 1er constat d'abord, il s'av�re qu'il n'est pas possible de le faire "nativement".
Par contre il semble qu'il est possible de le faire avec des plugins.
http://stackoverflow.com/questions/3...nchronous-ajax
D'apr�s ce que j'ai compris, ces plugin permettent de recr�er le comportement n�cessaire pour uploader un fichier de mani�re normale. (avec un Iframe)
Liens vers ces plugin :
http://blueimp.github.com/jQuery-File-Upload/
http://www.uploadify.com/
http://valums.com/ajax-upload/
http://www.codeproject.com/Articles/...T-using-jQuery
Le truc c'est que je comprends pas comment faire fonctionner ces plugins, malgr� les tutoriels.
Je comprends pas quels contr�les HTML je dois mettre dans ma page.
un input type="file" + un input type=button ?
autre chose ?
C'est pas clair, je trouve que les tutoriels ne sont pas si clairs que �a.
Voici mon environnement actuel et le code que j'avais fait (avant de savoir que l'upload en ajax n�cessitait un plugin) :
J'ai une page .aspx.
Cette page .aspx a une page ma�tre. C'est dans cette page ma�tre que je met la r�f�rence vers la biblioth�que JQuery entre autre :
Dans ma page .aspx, j'ai tout simplement un composant input type="file" et un bouton input type="button" pour uploader le fichier.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 <script type="text/javascript" src='<%#this.ResolveClientUrl("~/script/jquery-1.6.min.js"+"?v="+BusinessLayer.MyConfiguration.versionRessources)%>'></script> <script type="text/javascript" src='<%#this.ResolveClientUrl("~/script/jquery-ui-1.8.11.min.js"+"?v="+BusinessLayer.MyConfiguration.versionRessources)%>'></script>
J'ai une m�thode JQuery associ�e au click sur le bouton.
Cette m�thode appelle une m�thode dans un webservice.
C'est cette m�thode dans le webservice qui va uploader le fichier.
Voici ma page .aspx :
Et ma m�thode, dans le webservice :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestUploadAjax.aspx.cs" Inherits="TechnicalParts_TestUploadAjax" MasterPageFile="~/Main.Master" %> <%@ Import Namespace="BusinessLayer" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="Left" Runat="Server"> <div> <div> <input type="file" id="FileUploader" /> </div> <div > <input type="button" id="btnOKUpload" value="Upload le fichier sur le serveur" />   </div> </div> <script type="text/javascript" language="javascript"> var userId = "<%=Session[MyConfiguration.UserGuid] %>"; var idLanguage = "<%=Session[MyConfiguration.IdLanguage] %>"; $(document).ready(function () { // --------------------------------------------------------- Event 'click' button ----------------------------------------------------------------------- $("#btnOKUpload").click(function () { $("#spanListReferencesNotFound").hide(); var pathFile = $("#FileUploader").attr("value"); if (pathFile != undefined && pathFile != "") { $.ajax({ type: "POST", url: "MyWebService.asmx/UploadFileOnServer", contentType: "application/json; charset=utf-8", data: JSON.stringify({ "pathFile": pathFile, "idLanguage": idLanguage, "userId": userId }), dataType: "json", success: function (response) { alert("OK"); }, error: function (error) { alert('Erreur : \n' + 'Echec upload. \n' + JSON.parse(error.responseText).Message + "\nStack Trace : \n" + JSON.parse(error.responseText).StackTrace); } }); } else { alert("Chemin de fichier incorrect"); } }); // ----------------------------------------------------------------------------------------------------------------------------------------------------------- }); </script> </asp:Content>
Ceci fonctionne tr�s bien dans mon environnement de d�veloppement avec IIS de Visual Studio (Cassini).
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 [WebMethod] public void UploadFileOnServer(string pathFile, byte idLanguage, Guid userId) { string nameFile = pathFile.Split('\\').Last(); // Enregistrer le fichier dans le répertoire d'upload if (File.Exists(Server.MapPath("~/UploadedFiles/Test/") + nameFile)) { File.Delete(Server.MapPath("~/UploadedFiles/Test/") + nameFile); } File.Copy(pathFile, Server.MapPath("~/UploadedFiles/Test/") + nameFile); }
Par contre, lorsque mon application ASP.NET est d�ploy�e dans son environnement de production, sur le serveur de production, �a ne fonctionne plus.
L'upload ne fonctionne pas.
Bien s�r, j'arrive me d�brouiller autrement, en utilisant une m�thode ASP.NET "classique" pour uploader mon fichier (avec le composant server "asp:FileUpload") :
la page aspx :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <%@ Page Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeFile="TestUploadAspNet.aspx.cs" Inherits="TechnicalParts_TestUploadAspNet" %> <%@ Import Namespace="BusinessLayer" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="Left" Runat="Server"> <!-- http://lesite.org/teamitelios/archive/2008/05/16/asp-net-fileupload-et-updatepanel.aspx --> <asp:UpdatePanel runat="server" ID="uPanelFileUploader" UpdateMode="Conditional"> <Triggers> <asp:PostBackTrigger ControlID="btnUpload" /> </Triggers> <ContentTemplate> <asp:Panel runat="server" ID="panelA" Enabled="true"> <asp:FileUpload runat="server" ID="fileUploader" /> <asp:Button runat="server" ID="btnUpload" Text="Upload le fichier sur le serveur" OnClick="btnUpload_Click" /> </asp:Panel> </ContentTemplate> </asp:UpdatePanel> </asp:Content>
Et ma page .aspx.cs :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using BusinessLayer; public partial class TechnicalParts_IllustrationsIntegratorAspNet : OscaroPage { protected void Page_Load(object sender, EventArgs e) { } protected void btnUpload_Click(object sender, EventArgs e) { if (fileUploader.HasFile) { if (File.Exists(Server.MapPath("~/UploadedFiles/Test/") + Path.GetFileName(fileUploader.FileName))) { File.Delete(Server.MapPath("~/UploadedFiles/Test/") + Path.GetFileName(fileUploader.FileName)); } fileUploader.SaveAs(Server.MapPath("~/UploadedFiles/Test/") + Path.GetFileName(fileName)); } } }
Cette m�thode fonctionne tout le temps quelque soit l'environnement (d�veloppement et production).
Mais pour moi, j'ai l' inconv�nient suivant :
==> L 'ASP.NET peut entra�ner des Timeout dans le traitement que je vais faire par la suite.
J'arrive � g�rer ce timeout avec un syst�me de Timer et de threads, mais c'est assez fastidieux � mettre en place.
Donc ce que je voudrais, c'est arriver � utiliser un de ces plugin qui me permettrait de faire mon upload de fichier en JQuery.
Merci de votre aide.
Partager