2010-10-01 4 views
0

J'ai une méthode de page Web, et j'ai besoin d'avoir accès aux en-têtes, et en particulier les fichiers téléchargés. Est-ce possible? Une méthode Web peut-elle recevoir un fichier?Obtenir HttpRequest avec une méthode Web ASP.NET

Si non, que recommanderiez-vous pour télécharger des fichiers sans publication? J'utilise la bibliothèque de formulaires jQuery qui supporte cela (et je l'ai eu avec Django), mais j'ai du mal à trouver des réponses sur la façon de le faire avec ASP.NET.

+0

au serveur Web en utilisant ASP.NET? ou? – mastak

+0

Oui, je veux télécharger un fichier depuis le navigateur vers le serveur web en utilisant ajax ou une méthode de page similaire, de préférence en utilisant le plugin jQuery Forms. –

Répondre

0

Le plugin jQuery Forms convertit un téléchargement de fichier en une publication basée sur iframe plutôt qu'un post ajax automatiquement. (Cela est dû au fait que XHR n'inclut pas les fichiers.) Il vous suffit donc de créer une page aspx régulière pour gérer la réponse. Il peut simplement être vide à l'exception d'un gestionnaire d'événements de chargement. Si vous avez besoin d'une réponse, vous pouvez la repasser dans le code HTML, qui peut être lu à partir du corps qui est renvoyé.

Par exemple, créer un transfert de fichier, sur le changement appelle cela:

function doSubmit() { 
     var data = {}; 
     $("#"+formId).ajaxSubmit({success: gotResponse, data: data}); 
} 

Notez que « ajaxSubmit » ici est un terme impropre. Dans ce cas (avec un téléchargement de fichier), il s'agit en fait d'un article ordinaire qui ressemble à une requête ajax. De toute évidence, formId est l'identifiant du formulaire contenant le contrôle de téléchargement de fichier.

et la fonction de réponse est, (par exemple):

function gotResponse(data) { 
      /* Cut out the extraneous stuff */ 
    result = data.replace(/^.*<div id="infoDiv">/, '') 
         .replace(/<\/div>.*$/,''); 
      /* do something with result */ 

    } 

Créer une page ASPX avec un div comme ceci:

la charge de page pour cette page ceci:

Je ne suis pas sûr que je vous ai compris .. voulez-vous télécharger le fichier du client?

HTH

1

Celui de bonne manière connue utilise Input tag avec le type Fichier. Voici une partie de ASPX code de la page:

<input type="button" value="upload" onmousemove="mousemove()" class="ClientButton" /> 
<input type="file" id="uploadfile" class="file" name="uploadfile" runat="server" 
    onpropertychange="uploaderChange()"> 
<asp:Button ID="Upload" runat="server" /> 
  • bouton Upload utilise pour des raisons impérieuses styles pour la balise de fichier d'entrée non-skinable .
  • Télécharger le bouton en utilisant pour poster le fichier sur le serveur.

logique métier simple javascript pour cacher défaut bouton Fichier d'entrée et utilisez notre:

var muploader = '<%=uploadfile.ClientID %>'; 

function mousemove() { 
    var file = document.getElementById(muploader); 
    file.style.left = event.x - 15; // argh.. hardcoded due to static button size 
    file.style.top = event.y - 35; 
} 

function uploaderChange() { 
    if (event.propertyName == "value") { 
     fileName = document.getElementById(muploader).value; // if you need file name on server - you should extract it here 
    } 
} 

et styles (je ne fournis pas les styles pour les boutons - comme dans tous les cas yo utiliser votre propre):

input.file 
{ 
    position: absolute; 
    height: 20px; 
    width: 1px; 
    opacity: 0; 
    -moz-opacity: 0; 
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); 
} 

Et code C# (page ASPX derrière le code):

protected override void Upload_Click(object sender, EventArgs e) 
{ 
    BinaryReader reader = new BinaryReader(uploadfile.PostedFile.InputStream); 
    var ImageFileContent = reader.ReadBytes((int) uploadfile.PostedFile.InputStream.Length); 
    // ... 
} 

Et à quoi il ressemble dans mon application:

alt text

Remarque: testé sous IE uniquement. Il peut être nécessaire de corriger un code CSS ou javascript en raison d'un autre navigateur. Faites-moi savoir plz.

OU

Here is yet one solution mais pas testé par moi.

Questions connexes