我有一個頁面Web方法,我需要訪問標題,特別是上載的文件。這可能嗎? Web方法可以接收文件嗎?使用Web方法獲取HttpRequest ASP.NET
如果不是,那麼您會推薦上傳文件而無需回傳?我正在使用支持此功能的jQuery表單庫(並且我已經使用它與Django一起工作),但是,我很難找到如何在ASP.NET中執行此操作的答案。
我有一個頁面Web方法,我需要訪問標題,特別是上載的文件。這可能嗎? Web方法可以接收文件嗎?使用Web方法獲取HttpRequest ASP.NET
如果不是,那麼您會推薦上傳文件而無需回傳?我正在使用支持此功能的jQuery表單庫(並且我已經使用它與Django一起工作),但是,我很難找到如何在ASP.NET中執行此操作的答案。
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
已知的好方法之一是使用類型爲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" />
簡單的商業邏輯隱藏默認輸入文件按鈕,然後使用我們的:
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);
// ...
}
而且它的外觀在我的應用程序:
注:IE ONLY下進行測試。由於其他瀏覽器可能需要修復一些CSS或JavaScript代碼。讓我知道PLZ。
OR
Here is yet one solution但不是我的測試。
我不確定我是否理解你..你想從客戶端上傳文件嗎?使用ASP.NET的Web服務器?要麼? – mastak 2010-10-01 22:08:41
是的,我希望使用ajax或類似的頁面方法將文件從瀏覽器上傳到Web服務器,最好使用jQuery Forms插件。 – 2010-10-01 22:12:43