问题描述
各位高手大家好,本人想请教个技术问题啊。我在本地页面放了一个上传控件想通过ajax的方式来读取用户上传上来的Excel的文件内容,但是不想把Excel先上传到服务器在读取,想直接读取,请参考代码:ashx文件:publicvoidProcessRequest(HttpContextcontext){stringfu=context.Request["fu"];//客户端上传上来的文件路径DataTabledt=ExcelDataSource(context.Server.MapPath(fu),"Sheet1");//读取Excel文件内容context.Response.ContentType="text/plain";context.Response.Write(dt.Rows.Count.ToString());}publicDataTableExcelDataSource(stringfilepath,stringsheetname){stringstrConn;strConn="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+filepath+";ExtendedProperties='Excel8.0;HDR=YES;IMEX=1;';";using(OleDbConnectionconn=newOleDbConnection(strConn)){OleDbDataAdapteroada=newOleDbDataAdapter("select*from["+sheetname+"$]",strConn);DataTabledt=newDataTable();oada.Fill(dt);returndt;}}Web页面就是一个上传控件:ajax方式:$.ajax({type:"POST",url:"Ajax/FU.ashx",data:"fu="+escape(fu.val()),success:function(data,textStatus){alert(data);},error:function(XMLHttpRequest,textStatus,errorThrown){alert(XMLHttpRequest.status);}//dataType:"xml"});在本地测试是OK的,我发布到服务器上就不行了,报500错误,我认为就是因为WEB页在服务上所以得到客户端的文件路径没用的。请指点下
解决方案
解决方案二:
“WEB页在服务上所以得到客户端的文件路径”?我明告诉你,我有个图片在d:downhi_girl.png,你从你的网站上都我吧!
解决方案三:
引用1楼的回复:
“WEB页在服务上所以得到客户端的文件路径”?我明告诉你,我有个图片在d:downhi_girl.png,你从你的网站上都我吧!
不好意思,可能您理解错啦,我的意思是说我想从WEB页里的上传控件用AJAX的方式进行读取Excel文件。
解决方案四:
有人能给我一个解决思路吗?
解决方案五:
不上传是不可能的,就算你直接用Request.Files,文件已经上传到临时文件了,服务器只有获取到文件才能做读取
解决方案六:
引用4楼的回复:
不上传是不可能的,就算你直接用Request.Files,文件已经上传到临时文件了,服务器只有获取到文件才能做读取
那请问怎样上传到临时文件?我不想直接上传上来啊,毕竟每次操作的话都要上传一个Excel,不太好吧。时间久了,服务器上就有很多Excel文件了
解决方案七:
你直接读取Request.Files里面的文件不做保存即可
解决方案八:
引用6楼的回复:
你直接读取Request.Files里面的文件不做保存即可
问题是我用了AJAX的ashx文件,那里面得不到Request.Files的文件啊。是空的,能否有代码参考?
解决方案九:
哦,没看到题,用ajax是无法上传二进制的,内部只能走普通文本,你可以通过一个iframe的src来进行上传,也是无刷新的,在上传完之后通过ashx返回一个divResponse.Write(str),表示上传成功即可
解决方案十:
引用8楼的回复:
哦,没看到题,用ajax是无法上传二进制的,内部只能走普通文本,你可以通过一个iframe的src来进行上传,也是无刷新的,在上传完之后通过ashx返回一个divResponse.Write(str),表示上传成功即可
请问有没有DEMO代码参考啊?谢谢。。。。
解决方案十一:
我也在考虑这个问题,能不能不保存到服务器磁盘上,也就是不SaveAs,直接从内存中读取文件内容?