2013-04-25 18 views
5

Modyfikuję istniejący projekt ASP.NET. Pierwotny autor błędnie próbował stworzyć stylowy plik asp: FileUpload, ustawiając jego widoczność na ukrytą i tworząc dwa niestandardowe stylowe przyciski przeglądania i zapisywania.Używanie "<typ wejściowy =" plik ".... />" zamiast asp: FileUpload

Ze względów bezpieczeństwa IE na to nie zezwala. Moja strategia polega na użyciu tagów wejściowych z typem = "file", takim jak this example. Więc jeśli skonfigurowałem wejście takie jak <input type="file" ID="inputFile" /> w jaki sposób mogę uzyskać dostęp/zapisać plik w moim kodzie za, inputFile.SaveAs("someFile.txt");? Również (w kodzie z tyłu) mogę zrobić coś takiego jak inputFile.HasFile lub jest jakiś inny analog tego?

zgodnie z zaleceniami próbuję coś jak następuje:

   <td> 
       Enabled: <asp:CheckBox ID="CheckBox2" runat="server" /> &nbsp;&nbsp; 
       <div id="testFileUploader">> 
        <input type="file" id="browserHidden" runat="server" /> 
        <div id="browserVisible"><input type="text" id="fileField" /></div> 
       </div> 
      </td> 
+1

Wystarczy dodać runat = "serwer" do niego. – melancia

+0

Ach tak, zapomniałem o tym. Dzięki. A co z dostępem do niego w kodzie, czy '.SaveAs()' i '.HasFile' działają na obiekcie' inputFile'? – kmarks2

+0

Zawarte w mojej odpowiedzi. :) – melancia

Odpowiedz

2

Dodaj runat = "server" do obiektu. W ten sposób będzie działać na CodeBehid, tak jak każda kontrolka asp: FileUpload.

+0

Zmodyfikowałem mój oryginalny post, aby odzwierciedlić to w ten sposób. Ale teraz nie mogę zbudować, ponieważ dostaję błędy wszystko, co próbuję zrobić "browserHidden.HasFile' lub" browserHidden.SaveAs ("someFile.txt") ', itp. Rzeczywiście wydaje się, że nic, co pojawia się w Intellisence podczas pisania "przeglądarki" wydaje mi się pozwalać na zapisanie pliku. Jak mogę to zrobić na obiekcie wejściowym? – kmarks2

+0

Czy możesz zamieścić tutaj błędy? – melancia

0
if(fileUrunResim.HasFile) 
    fileUrunResim.SaveAs(MapPath("~/Images/" + fileUrunResim.FileName)); 


**if you unique filename,** 

string extension = Path.GetExtension(fileUrunResim.FileName); 

string fileName = Guid.NewGuid().ToString().Substring(0, 25) + extension ; 


if(fileUrunResim.HasFile) 
    fileUrunResim.SaveAs(MapPath("~/Images/" + filename)); 
10

Tak, można wygenerować losową nazwę pliku dla przyszłej przesłać, w oparciu o GUID na CodeBehind strony ASPX:

HttpPostedFile filePosted = Request.Files["uploadFieldNameFromHTML"]; 

if (filePosted != null && filePosted.ContentLength > 0) 
{ 
    string fileNameApplication = System.IO.Path.GetFileName(filePosted.FileName); 
    string fileExtensionApplication = System.IO.Path.GetExtension(fileNameApplication); 

    // generating a random guid for a new file at server for the uploaded file 
    string newFile = Guid.NewGuid().ToString() + fileExtensionApplication; 
    // getting a valid server path to save 
    string filePath = System.IO.Path.Combine(Server.MapPath("uploads"), newFile); 

    if (fileNameApplication != String.Empty) 
    { 
     filePosted.SaveAs(filePath); 
    } 
} 

Dla Request.Files["uploadFieldNameFromHTML"] ustawić ID w HTML kod tutaj:

<input type='file' id='...' /> 

Ponadto, nie zapomnij określić runat="server" przy głównej postaci w stronę ASPX, to lepiej, aby ustawić go w formularzu głównym i nie zapomnij o enctype="multipart/form-data" parametr <form>:

<body> 
    <form enctype="multipart/form-data" id="form1" runat="server"> 
     <input type='file' id='uploadFieldNameFromHTML' /> 
... 
+0

Wyszukiwanie tego od dłuższego czasu. :) dzięki za pomoc – VarunJi

Powiązane problemy