2011-12-14 3 views
0

Я хочу подать Uploadcontext.Request.Files [0] пусто в FireFox,

Код выглядит так:

int iTotal = context.Request.Files.Count; 
if(iTotal>0) 
    //Upload().... 

Он отлично работает, когда я использую IE7,8,9
Но когда я использую его в FireFox 8, он больше не работает.
iTotal всегда равен 0.

Есть ли идеи или предложения для меня? EDIT:

У меня есть две страницы. В странице

$("idBtnupload").onclick = function() 
    { 
    ... 
    fu.Form.submit(); 
    } 
<form id="uploadForm" action="File.ashx?type=<% =type %>" method="post" enctype="multipart/form-data"> 
    <input type="button" value="开始上传" id="idBtnupload" /> 
</form> 
+1

Больше никаких догадок! Вы должны показать больше кода, чтобы кто-нибудь мог предложить. – adatapost

+0

У меня есть две страницы. Страница A - '$ (" idBtnupload "). Onclick = function() {... \t fu.Form.submit(); }

/> ' – jasonLam

+0

Страница B - это ashx. основным методом является 'public void ProcessRequest (контекст HttpContext) {int iTotal = context.Request.Files.Count; } 'здесь, iTotal всегда равен 0, когда я использую FireFox8.0 – jasonLam

ответ

0

Вы должны включить "runat='server'" атрибут вашего входного файла

пример:

<input type="file" id="myfile1" runat="server" > 
+0

Я попробовал. но это не сработало. В этой статье [ссылка] (http://www.codeproject.com/KB/aspnet/AspNetHandlerAjaxUpload.aspx) автор сказал, что ключевым моментом является использование Context.Request.InputStream в FireFox, но когда я его попробовал , я все равно не смог получить имя файла. – jasonLam

0
String ffFileName = HttpContext.Current.Request.Headers["X-File-Name"]; 

if ((null == ffFileName) && (0 == context.Request.Files.Count)) 
    return; 

string tempDir = ConfigurationSettings.AppSettings["FilesTempDir"]; 
string filePath = String.Format("{0}{1}", tempDir, Guid.NewGuid().ToString()); 

if (null != ffFileName) 
{ 
    Stream inputStream = HttpContext.Current.Request.InputStream; 
    byte[] fileBytes = ReadFully(inputStream); 

    File.WriteAllBytes(filePath, fileBytes); 
} 
else 
{ 
    HttpPostedFile file = context.Request.Files[0]; 
    file.SaveAs(filePath); 

} 

context.Response.ContentType = "text/html"; 
context.Response.Write("{\"success\": true}"); 

Этот метод используется для чтения потока

public static byte[] ReadFully(Stream input) 
{ 
byte[] buffer = new byte[16 * 1024]; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    int read; 
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
    ms.Write(buffer, 0, read); 
    } 
    return ms.ToArray(); 
} 

}