2010-10-01 78 views
0

我有一個頁面Web方法,我需要訪問標題,特別是上載的文件。這可能嗎? Web方法可以接收文件嗎?使用Web方法獲取HttpRequest ASP.NET

如果不是,那麼您會推薦上傳文件而無需回傳?我正在使用支持此功能的jQuery表單庫(並且我已經使用它與Django一起工作),但是,我很難找到如何在ASP.NET中執行此操作的答案。

+0

我不確定我是否理解你..你想從客戶端上傳文件嗎?使用ASP.NET的Web服務器?要麼? – mastak 2010-10-01 22:08:41

+0

是的,我希望使用ajax或類似的頁面方法將文件從瀏覽器上傳到Web服務器,最好使用jQuery Forms插件。 – 2010-10-01 22:12:43

回答

0

jQuery Forms插件將文件上傳轉換爲基於iframe的帖子,而不是自動發佈的ajax帖子。 (這是因爲XHR不包含文件。)因此,您只需創建一個常規的aspx頁面來處理響應。除了加載事件處理程序外,它可以簡單地爲空。如果你需要任何迴應,你可以將它推回到HTML中,它可以從傳回的主體讀取。

例如,創建,對變化調用這個文件上傳:

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

注意,「ajaxSubmit會」在這裏是用詞不當。在這種情況下(使用文件上傳),它實際上是一個看起來像ajax請求的常規帖子。顯然,formId是包含文件上傳控件的表單的ID。

和響應功能是,(例如):

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

    } 

與這樣一個div創建aspx頁:

在頁面加載該頁面做到這一點:

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      // Get the file and do whatever with it. 
      var file = Request.Files[0]; 
      // Put the info to send back as a result here 
      InfoDiv.InnerHtml = "{error: false}"; // Or whatever 
     } 
     catch(Exception e) 
     { 
      InfoDiv.InnerHtml = "{error: true}"; // Or whatever 
     } 
    } 

HTH

1

已知的好方法之一是使用類型爲File的Input tag。下面是從ASPX頁面代碼部分:

<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" /> 
  • 上傳按鈕用來覆蓋 樣式不更換皮膚的輸入文件 標籤。
  • 上傳按鈕用於回發 文件到服務器。 JavaScript的

簡單的商業邏輯隱藏默認輸入文件按鈕,然後使用我們的:

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 
    } 
} 

和樣式(我不爲按鈕提供風格 - 在任何情況下喲將使用自己的):

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

而且C#代碼(代碼隱藏ASPX頁面):

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); 
    // ... 
} 

而且它的外觀在我的應用程序:

alt text

:IE ONLY下進行測試。由於其他瀏覽器可能需要修復一些CSS或JavaScript代碼。讓我知道PLZ。

OR

Here is yet one solution但不是我的測試。

相關問題