`

上传附件成功后的返回值问题

阅读更多
1、页面上传Excel:
<form id="uploadForm" enctype="multipart/form-data" method="post">
  <table id="tb_east">
    <tr>
      <td>文件名:</td>
      <td><input id="fileName" class="srk"/></td>
    </tr>
    <tr>
      <td>本地上传:</td>
      <td><input type="file" id="file" name="upload"
                 title="请选择一个Excel文件"
                 onChange="if(this.value) getFileName(this.value);"/>
      </td>
    </tr>
    <tr>
      <td colspan="2" align="center">
        <a href="javascript:void(0);" id="btn"
           class="easyui-linkbutton" onclick="uploadSubmit()">上传</a>
      </td>
    </tr>
  </table>
</form>
<script type="text/javascript">
  // 获取附件名
  function getFileName(tValue){
    var t1 = tValue.lastIndexOf("\\");
    var t2 = tValue.lastIndexOf(".");
    var suffix=tValue.substring(t2+1);
    if (suffix!="xls") {
      var file=document.getElementById("file");
      if (file.outerHTML) {  // for IE, Opera, Safari, Chrome
        file.outerHTML = file.outerHTML;
      } else { // FF(包括3.5)
        file.value = "";
      }
      $("#fileName").val("");
      alert("只支持后缀是.xls的Excel文件!");
      return false;
    }
    if(t1 < t2 && t1 < tValue.length){
      document.getElementById("fileName").value = tValue.substring(t1 + 1, t2);
    }
}
// 上传Excel
function uploadSubmit(){
  var isIE=0;
  if (window.attachEvent) {
    isIE=1;
  }
  var options = {
    //跳转到相应的Action
   url : "/ccit_datacenter/siphondata/upload.actionfunction=readTable&isIE="+isIE,
   type : "POST",//提交方式
   success : function(msg) {//调用Action后返回过来的数据
     if (msg) {
       $.messager.show({
         title:"提示",
         msg:"上传成功!",
         showType:"show",
         style:{left:"",right:0,
                top:document.body.scrollTop+document.documentElement.scrollTop,
                bottom:""}
         });
     }
     msg=msg.replace(new RegExp(/(=)/g),":");
     var data=eval("(" + msg+")");
     $("#tables").combobox({
       valueField: 'label',
       textField: 'value',
       data:data,
       onSelect:function(record){
         loadField(record);
       }
     });
   }
  };
  $("#uploadForm").ajaxSubmit(options);//绑定页面中form表单的id
}
// 加载字段
function loadField(record){
  var isIE=0;
  if (window.attachEvent) {
    isIE=1;
  }
  var options = {
    //跳转到相应的Action
    url : "/ccit_datacenter/siphondata/upload.actionfunction=readField&isIE="+isIE
          +"&tableName="+record.value,
    type : "POST",//提交方式
    success : function(msg) {//调用Action后返回过来的数据
      msg=msg.replace(new RegExp(/(=)/g),":");
      var data=eval("(" + msg+")");
      $("#centerGrid").datagrid("loadData",data);
    }
  };
  $("#uploadForm").ajaxSubmit(options);//绑定页面中form表单的id
}
</script>
2、Action中处理完附件
/**
* 读取Excel文件
* @return
*/
public String upload(){
  String result="";
  try {
    if(upload!=null){
      Workbook book = Workbook.getWorkbook(upload);
      Sheet[] tables=book.getSheets();
      List<Map<String, Object>> tablesList=new ArrayList<Map<String, Object>>();
      for (Sheet sheet2 : tables) {
        Map<String, Object> tableMap=new HashMap<String, Object>();
        tableMap.put("label", "'"+sheet2.getName()+"'");
        tableMap.put("value", "'"+sheet2.getName()+"'");
        tablesList.add(tableMap);
      }
      result=tablesList.toString();
      book.close();
    }
    if (isIE==1) {// 是IE浏览器
      is = new ByteArrayInputStream(result.getBytes("GBK"));
    }else{
      is = new ByteArrayInputStream(result.getBytes("UTF-8"));
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
  return SUCCESS;
}
3、struts.xml:
<action name="upload"
        class="com.milestone.ccit.datacenter.action.ExcelUploadAction"
        method="upload">
  <result type="stream" name="success">
    <param name="contentType">text/html</param>
    <param name="inputName">is</param>
  </result>
</action>
总结:用Ajax提交表单时,直接返回json={...},页面中根本接不到,故Struts中配置时,直接用流写回去的。返回到页面的都是字符串类型,可以用下面的形式转化为json对象:
  msg=msg.replace(new RegExp(/(=)/g),":");// 把map组成的键值对的"="号转化为":"
  var data=eval("(" + msg+")");
分享到:
评论

相关推荐

    OA签核单附件上传小功能

    - **用户体验优化**:如显示上传进度,提供取消上传的选项,以及在上传成功后自动将文件信息插入到表格中等。 - **安全性**:防止恶意文件上传,可能需要进行文件类型检查,防止上传可能含有病毒或脚本的文件。 综...

    解决layui上传文件提示上传异常,实际文件已经上传成功的问题

    在使用layui前端框架进行文件上传时,可能会遇到一个常见的问题:虽然文件实际上已经成功上传到服务器,但layui却显示上传异常。这个问题通常与后端服务器返回的数据格式有关。本文将详细分析这个问题的原因,并提供...

    21.集成开发需求方案附件二:OA系统工作流WebService接口使用说明.doc

    如果页面显示了相关的服务列表,说明部署成功。若未显示,需要检查`ecology-&gt;WEB-INF-&gt;web.xml`配置文件,确认 `&lt;servlet&gt;` 和 `&lt;servlet-mapping&gt;` 部分包含XFireServlet的相关配置,如果缺失,需要手动添加。 接...

    struts2文件上传下载

    `success.jsp`页面就是用来展示上传成功后的提示信息。 6. **文件上传的前端页面** 在JSP页面(如`index.jsp`)中,需要包含Struts2的标签库,并使用`s:file`标签来提供一个文件上传控件。同时,`&lt;s:form&gt;`标签的`...

    php简单实现发送带附件的邮件

    另外,为了提升邮件发送的成功率和安全性,实际生产环境中可能还需要考虑进行邮件头的额外设置,比如增加Content-ID来避免邮件客户端在解析附件时的编码问题,设置合适的字符集等。而为了防止恶意利用表单发送垃圾...

    delphl xe8 可用的android 一维、二维扫描源码

    修改后可成功返回扫描结果。 使用方法1:作为控件使用。 方法2. 作为单元引用,推荐使用此种方式,很多人控件安装不添加library,报错;好讨厌delphi重装后还得重装控件。 特别说明,iOS未测试,IOS需要的文件...

    delphi xe android可用的一维二维扫码源码

    修改后可成功返回扫描结果。 使用方法1:作为控件使用。 方法2. 作为单元引用,推荐使用此种方式,很多人控件安装不添加library,报错;好讨厌delphi重装后还得重装控件。 特别说明,iOS未测试,IOS需要的文件...

    泛微 ecology9.0 文档(DocService)WebService接口使用说明

    部署成功后,可以通过访问以下URL获取DocService接口的WSDL描述文件: ``` http://服务器:端口号/services/DocService?wsdl ``` 此WSDL文件详细描述了接口的结构、方法、数据类型等信息,是客户端调用接口的基础。...

    在PB中实现ftp传输

    - 调试过程中,可以查看FTP对象的返回值和日志信息来确定问题所在。 总结,PowerBuilder提供了方便的方式来实现FTP传输,无论是使用内置对象还是第三方库,都能满足大多数开发需求。理解FTP的工作原理和PB中的相关...

    批处理工具包个人版 V3.99 系统资料转移、备份ADSL账号、优化、查杀、IE LSP修复等

    新版本已发布: 程序更新: V 3.99 2009.05.15 2009.05.15 部分代码重新归类做了新的排版,目的在于便于大家 使用和查找相对应的功能模块,另外在开机启动项的...由于代码过多,无法贴出来,只能上传附件。见谅。。。

    PHPMailer.zip

    6. **错误处理**:检查`send`方法的返回值,成功则发送成功,否则查看错误信息进行调试。 通过这个库,PHP开发者可以快速、高效地实现邮件功能,无论是用于用户注册验证、系统通知还是其他业务场景,PHPMailer都是...

    phpmail 邮件发送

    如果发送成功,它会返回true,否则返回false,可以根据返回值处理错误。 7. **错误处理**:PHPMailer提供了错误处理机制,当邮件发送失败时,可以通过`ErrorInfo`属性获取错误信息,以便于调试和问题排查。 8. **...

    phpmailer 5.1(PHP邮件类,支持SMTP)

    3. **附件上传**:允许用户添加多个附件,包括各种文件类型。 4. **HTML邮件**:支持发送HTML格式的邮件,增强邮件的可读性和视觉效果。 5. **邮件验证**:通过验证发件人和收件人的邮箱地址,防止错误输入和垃圾...

    2021-2022计算机二级等级考试试题及答案No.19402.docx

    - **解析**: MySQL成功安装后,系统默认会创建一个名为`root`的超级管理员用户,因此创建的用户个数为1个。 #### 构造方法调用 - **知识点**: 构造方法是一种特殊的方法,用于初始化新创建的对象。 - **解析**: ...

    客户端统一验证JavaScript函数库及示例源码

    CancelClientEvent()是使用事件冒泡阻止了事件的继续执行,同时设置返回值,最终成功阻止事件的继续往后执行,当在客户端触发一要回发的按钮事件是,想在程序里结束让其继续执行时,以往则不是很好处理,如Enter键,...

Global site tag (gtag.js) - Google Analytics