ITPUB??ì3
ITPUB论坛 » Web开发 » ASP.NET与AJAX » 无刷新上传文件,嵌入iframe的不行,其他有没有什么好的解决方案

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: 无刷新上传文件,嵌入iframe的不行,其他有没有什么好的解决方案
离线 dotnetworker
一般会员



精华贴数 0
个人空间 0
技术积分 4606 (293)
社区积分 0 (1442008)
注册日期 2007-6-21
论坛徽章:33
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2007-12-4 20:15 
无刷新上传文件,嵌入iframe的不行,其他有没有什么好的解决方案

无刷新上传文件,嵌入iframe的不行,其他有没有什么好的解决方案


只看该作者    顶部
在线/呼叫 juanpeng
中级会员



精华贴数 0
个人空间 0
技术积分 4570 (296)
社区积分 0 (1441020)
注册日期 2007-6-21
论坛徽章:27
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2007-12-4 20:16 
据我所知,上传文件必须用到 <input   type="file> .而这个控件只能通过POST方式提交。
但有一些曲线救国的办法:
1.当form的action指向隐藏iframe,然后用AJAX来给用户一个加像。如果你一定要真相,那可以在服务器端截取并分析Request,同时不断响应AJAX来展现给用户一个进度条。
2.在IE下如果用户没有禁掉ActiveX,似乎可以用javascript来读文件流。
3.可以考虑使用flash等插件来完成上传
4.做个流氓软件完成上传


只看该作者    顶部
离线 mosticy
中级会员


精华贴数 0
个人空间 0
技术积分 2386 (657)
社区积分 2185 (560)
注册日期 2007-10-9
论坛徽章:2
      
      

发表于 2007-12-5 08:56 
webservice


__________________
(止步海阔天空.)
只看该作者    顶部
离线 忍者神龟



精华贴数 1
个人空间 0
技术积分 4671 (289)
社区积分 3863 (362)
注册日期 2002-7-22
论坛徽章:6
现任管理团队成员ITPUB元老授权会员ITPUB新首页上线纪念徽章  
      

发表于 2008-5-22 13:06 
今天也在搞这个问题,顺便把2楼的1贴过来:
本想利用AJAX实现无刷新文件上传,后来发现不易实现,在网上找了很久,终于找到一个“伪AJAX”的实现方式,现在发出来我实际的代码,一飨读者。
首先我们需要一个上传的HTML或者JSP文件,如下:
<FORM METHOD="POST" ACTION="../servlet/FileUploadServlet" enctype="multipart/form-data" target="hidden_frame" onSubmit="showmsg();" style="margin:0;padding:0">
                <input type="file" name="sfile" style="width:450">
                <input type="hidden" name="act" value="upload">
                <INPUT type="submit" value="上传文件"><span id="msg"></span>
                <br>
      <font color="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传</font>               
                <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
          </form>  
其中FORM的TARGET属性非常重要,把FORM的ACTION提交到一个隐藏的IFRAME中去执行,然后返回的时候在MSG的地方填入操作即可,SERVLET的类似代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
  PrintWriter out = response.getWriter();
  response.setCharacterEncoding("utf-8");
  response.setHeader("Charset","utf-8");
  response.setHeader("Cache-Control", "no-cache");

  String filepath="",msg="",ext="";
  SmartUpload su = new SmartUpload();
  boolean succ=true;
                  。。。。。。
  try{
   su.initialize(getServletConfig(),request,response);
   su.setMaxFileSize(102400000);
   su.setTotalMaxFileSize(102400000);
   su.setAllowedFilesList(mediaExt+","+flashExt+","+imgExt);
   su.setDeniedFilesList("exe,bat,,");
   su.upload();
   for (int i=0;i<su.getFiles().getCount();i++)
   {
    com.jspsmart.upload.File file = su.getFiles().getFile(i);
  
    if (file.isMissing()) continue;

    String fileName=UploadFileUtils.returnRandomFileName(file.getFileExt());
    ext=file.getFileExt().toLowerCase();
                 。。。。。。。。。。。
     
    msg="<a href="#">上传成功!</a>";
   }
  }catch(SmartUploadException sue){
   succ=false;
   msg="<font color=red>上传失败:请检查文件扩展名或文件大小!</font>";
  }catch(Exception ex){
   succ=false;
   msg="<font color=red>上传失败:请检查文件扩展名或文件大小!</font>";
   ex.printStackTrace();
  }
    msg=Escape.escape(msg);
    if(succ)
     out.println("parent.document.getElementById('msg').innerHTML = unescape('"+msg+"');parent.backCallIframe('"+Escape.escape(ext)+"','"+Escape.escape(filepath)+"')");
    else
     out.println("parent.document.getElementById('msg').innerHTML = unescape('"+msg+"');");
out.close();
}


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问