2010-01-05 13 views
1

Je souhaite télécharger un fichier du serveur vers un hôte local.Télécharger le fichier depuis le serveur asp.net

i ont un code du filet qui devrait fonctionner, mais ne fonctionne pas

 protected void Button4_Click(object sender, EventArgs e) 
    { 
    //To Get the physical Path of the file(test.txt) 
    string filepath = Server.MapPath("test.txt"); 

    // Create New instance of FileInfo class to get the properties of the file being downloaded 
    FileInfo myfile = new FileInfo(filepath); 

    // Checking if file exists 
    if (myfile.Exists) 
    { 
    // Clear the content of the response 
    Response.ClearContent(); 

// Add the file name and attachment, which will force the open/cancel/save dialog box to show, to the header 
Response.AddHeader("Content-Disposition", "attachment; filename=" + myfile.Name); 

// Add the file size into the response header 
Response.AddHeader("Content-Length", myfile.Length.ToString()); 

// Set the ContentType 
Response.ContentType = ReturnExtension(myfile.Extension.ToLower()); 

// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead) 
Response.TransmitFile(myfile.FullName); 

// End the response 
Response.End(); 
    } 

    } 

    private string ReturnExtension(string fileExtension) 
    { 
     switch (fileExtension) 
     { 
      case ".htm": 
      case ".html": 
      case ".log": 
       return "text/HTML"; 
      case ".txt": 
       return "text/plain"; 
      case ".doc": 
       return "application/ms-word"; 
      case ".tiff": 
      case ".tif": 
       return "image/tiff"; 
      case ".asf": 
       return "video/x-ms-asf"; 
      case ".avi": 
       return "video/avi"; 
      case ".zip": 
       return "application/zip"; 
      case ".xls": 
      case ".csv": 
       return "application/vnd.ms-excel"; 
      case ".gif": 
       return "image/gif"; 
      case ".jpg": 
      case "jpeg": 
       return "image/jpeg"; 
      case ".bmp": 
       return "image/bmp"; 
      case ".wav": 
       return "audio/wav"; 
      case ".mp3": 
       return "audio/mpeg3"; 
      case ".mpg": 
      case "mpeg": 
       return "video/mpeg"; 
      case ".rtf": 
       return "application/rtf"; 
      case ".asp": 
       return "text/asp"; 
      case ".pdf": 
       return "application/pdf"; 
      case ".fdf": 
       return "application/vnd.fdf"; 
      case ".ppt": 
       return "application/mspowerpoint"; 
      case ".dwg": 
       return "image/vnd.dwg"; 
      case ".msg": 
       return "application/msoutlook"; 
      case ".xml": 
      case ".sdxl": 
       return "application/xml"; 
      case ".xdp": 
       return "application/vnd.adobe.xdp+xml"; 
      default: 
       return "application/octet-stream"; 
     } 
    } 

maintenant lorsque le bouton est cliqué sur le fichier doit être téléchargé à partir du serveur à l'ordinateur hôte local ... mais rien ne semble se produire ...

i ont la test.txt sur le bureau du sérère ... l'option de fichier de sauvegarde ne vient pas aussi du côté client ..

je publie les fichiers et le mettre dans le dossier inetpub du serveur et exécutez l'interface graphique du client côté .. tout fonctionne, sauf ce ...

suggestions ... s'il vous plaît aider

ce programme télécharge un fichier s'il est présent dans le dossier Inetpub .. au lieu que je veux télécharger de tout emplacement dans le serveur ...

??

Répondre

-1

ok donc je mis un Response.Write après

string filepath = Server.MapPath("test.txt"); 

et a constaté que le chemin du fichier pointait vers le dossier inetpub ... donc quand je mets le test.txt dans ce dossier, il a travaillé ... de sorte que le programme est bon ..

mais maintenant si le fichier est tout autre endroit dans le serveur comment dois-je modifier le programme ... Je travaille là-dessus, mais toutes les suggestions sont les bienvenues

Ok je suis la répondre pour n'importe quel chemin aussi

i supprimer la server.mappath et mettre l'emplacement complet au lieu .. ne sais pas pourquoi il donnait des problèmes avant .. mais maintenant il fonctionne ...

+1

Les applications Web de confiance moyenne ne peuvent pas accéder aux fichiers en dehors du chemin d'application. Peut-être essayer d'élever les autorisations de votre application: http://msdn.microsoft.com/en-us/library/tkscy493.aspx Bien sûr, cela provoque de nouvelles préoccupations de sécurité. –

+0

mais je me connecte et usurpe l'identité de l'utilisateur ... s'il n'est pas usurpé il ne pourra pas télécharger ... il n'y a rien d'autre .. – user175084

4

Vous indiquez que test.txt se trouve sur le bureau du serveur. Est-il également situé juste à côté de la page que vous testez? Essayez soit de qualifier complètement le chemin vers le bureau ("C: \ Documents and Settings \ JeanDoe \ Desktop \ test.txt"), soit de copier le fichier pour qu'il soit placé à côté de la page .aspx.

+2

assurez-vous également que le compte IIS est autorisé à lire chaque fois que ledit fichier est planqué à. –

+0

donc je cours l'interface graphique de mes clients l'ordinateur va l'adresse de localisation du fichier de travail ... aussi comment puis-je faire IIS pour lire le fichier .. merci – user175084

+1

'unknown (google)' commenter votre vérification de l'existence du fichier, et vous verrez votre chemin d'accès complet dans votre message d'erreur. –

6

Ecrire sur le bouton Cliquez sur lequel u voulez télécharger des fichiers

protected void Button1_Click(object sender, EventArgs e) 

{ 

     string allowedExtensions = ".mp4,.pdf,.m4v,.gif,.jpg,.png,.swf,.css,.htm,.html,.txt"; 
     // edit this list to allow file types - do not allow sensitive file types like .cs or .config 

     string fileName = "Images/apple.jpg"; 
     string filePath = ""; 

     //if (Request.QueryString["file"] != null) fileName = Request.QueryString["file"].ToString(); 
     //if (Request.QueryString["path"] != null) filePath = Request.QueryString["path"].ToString(); 

     if (fileName != "" && fileName.IndexOf(".") > 0) 
     { 
      bool extensionAllowed = false; 
      // get file extension 
      string fileExtension = fileName.Substring(fileName.LastIndexOf('.'), fileName.Length - fileName.LastIndexOf('.')); 

      // check that we are allowed to download this file extension 
      string[] extensions = allowedExtensions.Split(','); 
      for (int a = 0; a < extensions.Length; a++) 
      { 
       if (extensions[a] == fileExtension) 
       { 
        extensionAllowed = true; 
        break; 
       } 
      } 

      if (extensionAllowed) 
      { 
       // check to see that the file exists 
       if (File.Exists(Server.MapPath(filePath + '/' + fileName))) 
       { 

        // for iphones and ipads, this script can cause problems - especially when trying to view videos, so we will redirect to file if on iphone/ipad 
        // if (Request.UserAgent.ToLower().Contains("iphone") || Request.UserAgent.ToLower().Contains("ipad")) { Response.Redirect(filePath + '/' + fileName); } 
        Response.Clear(); 
        Response.AddHeader("content-disposition", "attachment;filename=" + fileName); 
        Response.WriteFile(Server.MapPath(filePath + '/' + fileName)); 
        Response.End(); 
       } 
       else 
       { 
        litMessage.Text = "File could not be found"; 
       } 
      } 
      else 
      { 
       litMessage.Text = "File extension is not allowed"; 
      } 
     } 
     else 
     { 
      litMessage.Text = "Error - no file to download"; 
     } 
    } 
0

Vous pouvez changer de dossier à votre emplacement:

Directory.SetCurrentDirectory(HttpContext.Current.Server.MapPath("~ your path in here") 
Questions connexes