2013-05-15 25 views
7

Mamy 4 gości, którzy tworzą stronę internetową naszego ostatniego projektu szkolnego. Musimy zezwolić użytkownikowi na przesłanie pliku pdf. Używamy programu Visual Studio 2012 i mamy skonfigurowaną stronę główną, a cały proces logowania i tworzenie użytkowników działa. Używamy jQuery, a także jQueryMobile, ponieważ strona musi również działać na telefonach, a to sprawia, że ​​jest trochę łatwiej.Dlaczego moja strona ASP Page.Request.Files [] jest zawsze pusta? Próbowałem wszystkich opublikowanych poprawek.

Ale kiedy chcemy sprawdzić pliki, które klient próbuje załadować w naszym kodzie, Request.Files jest zawsze puste. Dlaczego to?

Mam zestaw encji w formularzu, którego używam, więc powinienem być w porządku. Wygląda na to, że strona ładuje się po kliknięciu przycisku przesyłania, a pole tekstowe w pliku wejściowym zostanie wyczyszczone. Następnie uruchamia metodę kodu.

Wyjście mamy to:

HALLOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
In the house 
Files[] size is 0 

stronie wzorcowej, która wygląda tak:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Main.Master.cs" Inherits="SendEtBrev.Main" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title>SendEtBrev.dk</title> 

     <meta http-equiv="Pragma" content="no-cache" /> 
     <meta http-equiv="Expires" content="-1" /> 
     <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;" /> 
     <meta name="MobileOptimized" content="width" /> 
     <meta name="HandheldFriendly" content="true" /> 

     <link rel="stylesheet" type="text/css" href="/Styles/reset.css" /> 
     <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
     <script src="/Js/fixes.js"></script> 
     <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" /> 
     <link rel="stylesheet" type="text/css" href="/Styles/sendetbrev.css" /> 

     <asp:ContentPlaceHolder ID="head" runat="server" /> 


    </head> 
    <body> 
     <header> 
     <div class="headerbox"> 
      <div class="headerlogo"> 
      <img class="autosizedimage" src="/Billeder/Logo.png" /> 
      </div> 
       <asp:LoginView ID="LoginViewMenu" runat="server"> 
       <LoggedInTemplate>      
        <a href="/Account/Minkonto.aspx">Min konto</a> 
        <a href="/Account/Logout.aspx">Log ud</a>    
       </LoggedInTemplate> 
       </asp:LoginView> 
      <br /> 
     </div> 

     </header> 

     <br /> 
     <br /> 
     <div> 
      <asp:ContentPlaceHolder ID="centercontent" runat="server" /> 
     </div> 
     <footer> 

     </footer> 
    </body> 
</html> 
kod

My ASPX to:

<%@ Page Language="C#" MasterPageFile="~/Main.Master" ValidateRequest = "False" AutoEventWireup="true" CodeBehind="Side1Uploadfil.aspx.cs" Inherits="SendEtBrev.SendBrev.Side1Uploadfil" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="centercontent" runat="server" > 

    <asp:Literal ID="introText" runat="server"/> 
    <br /> 
    <br /> 
    <asp:Literal ID="AccepteredeFormater" runat="server" /> 
    <br /> 
    .pdf<br /> 



    <!-- vises kun hvis der er en fejlbesked ved upload --> 
    <asp:Literal ID="errorMessage" runat="server" EnableViewState="false" /><br /> 



    Select a file to upload: 
     <form id="form1" name="form1" method="post" runat="server" enctype="multipart/form-data" > 
      <input type="file" accept="*.pdf" id="fileUploadControl" name="fileUploadControl" runat="server" /> 
     <asp:Button runat="server" ID="btnUpload" OnClick="btnUploadClick" Text="Upload" /> 

     <br/><br/> 

    <br /> 
     </form> 
    <asp:Button ID="FortsaetKnap" runat="server" data-role="none" CssClass="knap1" Visible="False" 
     OnClientClick="javascript:location.replace('/SendBrev/Side2Modtager.aspx');" /><br /> 


</asp:Content> 

A mój kod związany jest to:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Web; 
using System.Web.Script.Services; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using iTextSharp.text.pdf; 
using iTextSharp.text.xml; 
using System.Text.RegularExpressions; 
using System.Web.UI.WebControls; 
using System.IO; 

namespace SendEtBrev.SendBrev 
{ 
    public partial class Side1Uploadfil : System.Web.UI.Page 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      introText.Text = "Du er nu klar til at sende et brev."; 
      AccepteredeFormater.Text = "Følgende filformater accepteres:"; 
      FortsaetKnap.Text = "Fortsæt"; 
      btnUpload.Text = "Upload"; 
     } 

     protected void btnUploadClick(object sender, EventArgs e) 
     { 
      Response.Write("HALLOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
      Console.WriteLine("HALLOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
      Debug.WriteLine("HALLOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 

      if (fileUploadControl != null) 
      { 
       Response.Write("In the house"); 
       Console.WriteLine("In the house"); 
       Debug.WriteLine("In the house"); 
      } 

      if (Page.Request.Files.Count > 0) 
      { 
       { 
        //Get the first file. There could be multiple if muti upload is supported 
        string fileName = Page.Request.Files[0].FileName; 

        //Some validation 
        if (Page.Request.Files[0].ContentLength > 1 && !string.IsNullOrEmpty(fileName)) 
        { 
         FileValidator(Page.Request.Files[0].InputStream); 
        } 
       } 
      } 
      else 
      { 
       Debug.WriteLine("Files[] size is 0"); 
       Console.WriteLine("Files[] size is 0"); 
       Response.Write("Files[] size is 0"); 
      } 

     } 

     protected void FileValidator(Stream myFileStream) 
     { 
      Debug.WriteLine("Running FileValidator..."); 
      Console.WriteLine("Running FileValidator..."); 
      Response.Write("Running FileValidator..."); 
      if (myFileStream != null) 
      { 
       using (StreamReader sr = new StreamReader(myFileStream)) 
       { 
        Regex regex = new Regex(@"/Type\s*/Page[^s]"); 
        MatchCollection matches = regex.Matches(sr.ReadToEnd()); 
        Console.Write("PDF'en har " + matches.Count + " sider"); 
        Debug.Write("PDF'en har " + matches.Count + " sider"); 
        Response.Write("PDF'en har " + matches.Count + " sider"); 
        if (matches.Count > 0) 
        { 
         FortsaetKnap.Visible = true; 
        } 
       } 
      } 
      else 
      { 
       Debug.WriteLine("Filestream is null"); 
       Console.WriteLine("Filesream is null"); 
       Response.Write("Filestream is null"); 
       FortsaetKnap.Visible = false; 
      } 
     } 
    } 
} 
+0

to nie działa w sieciach komórkowych lub w ogóle? – qwr

+0

Wcale nie. FileUploadControl.HasFile zawsze jest fałszywe. –

+0

Mogę uzyskać nazwy plików za pomocą metody javascript w onchange dla obiektów typu input = "file". Ale kiedy wywoła kod, znikną. –

Odpowiedz

15

Zdarza się, ponieważ ajax jest domyślnie używany w jQueryMobile. W tym przypadku przesyłanie plików nie działa.

Dodanie data-ajax="false" do formularza powinno go naprawić.

<form id="form1" name="form1" data-ajax="false" method="post" runat="server" 
enctype="multipart/form-data" > 

In case you are using Razor

Przydatne linki:

File upload support on mobile

XMLHttpRequest 2 -Browser support

jQuery File Upload - Browser support

+2

O mój Boże! DZIĘKUJĘ CI! 32 godziny strasznych testów i Internetu. Jak mogę to zaakceptować 100 razy? –

+0

@Ultroman the Tacoman serdecznie zapraszamy. cieszę się, że mogłem ci pomóc. – qwr

+1

Jeśli używasz maszynki do golenia, sprawdź: http://stackoverflow.com/questions/17811651/how-do-i-add-data-attributes-to-html-beginform –