asp.net mvc + javascript导入文件内容

。近期做的是对现有项目进行重构。WEB FROM改成MVC,其实也算是推倒重来了。

里面有一个导入功能,将文件上传。原先的做法是有一个隐藏的iframe,在这个iframe的页面中设置一个表单form,form中有一个文件上传控件。而在服务器端,接收到上传文件后,真的先将文件保存,然后读取之。

好奇怪的做法啊。将用户文件内容读入,然后利用之,不必真的将文件先保存下来的,因为这是临时文件,没有保存的价值。完全可以将上传的文件内容直接读出,用完即弃。

其次,我理解原先为何要用一个隐藏的iframe。因为上传文件需要提交,而提交页面会导致刷新,为了避免页面内容刷新,于是搞了个隐藏的iframe,让它来负责提交。好是好,就是要多搞一个页面。

在新项目里面,前端,文件由ajax负责提交;服务器端,接收文件后直接处理,不保存下来,用完即弃:

前端:

<!-- 隐藏的上传控件,onchange时就触发提交 -->
<input type="file" id="fileImportData" name="fileImportData" onchange="f_pointXY.importData()" style="display:none;" />  

<!-- 导入按钮,点击后就触发上传控件的点击事件,弹出文件选择框 -->
<input type="button" value="导入" class="btn mini minilt" onclick='javascript:document.getElementById("fileImportData").click();' />
<script type="text/javascript">
    var f_pointXY = function () {

        function importData() {
            $("#formImport").ajaxSubmit({
                url: "@Url.StaticFile("~/Common/YongHai/importData/")" + $("#txt_SMID").val(),
                type: 'post',
                data: {},
                success: function (data) {
                    if (data.substr(0, 2) == "OK") {
                        alert("导入成功");
                    } else {
                        alert(data);
                    }
                },
                error: function (e) {
                    alert(e);
                }
            });
        }

        return {
            importData: function () {
                importData();
            }
        };

    }();
</script>

服务器端:

        [HttpPost]
        public ActionResult importData(int id)
        {
            if (Request.Files.Count == 0)
            {
                return Content("接收上传数据失败", "text/html");
            }

            string msg = "OK";

            HttpPostedFileBase fb = Request.Files[0];
            string[] Acs_FilePath = fb.FileName.Split('\\');
            string Acs_FileName = Acs_FilePath[Acs_FilePath.Length - 1];
            string Acs_FileType = Acs_FileName.Split('.')[1].ToLower();
            string xyType = Request["xyType"] ?? "";

            using (Stream fs = fb.InputStream)
            {
                    int fileLen = fb.ContentLength;
                    byte[] input = new byte[fileLen];
                    fs.Read(input, 0, fileLen);
                    string str = System.Text.Encoding.UTF8.GetString(input);
                    msg += str;
            }

            END:
            return Content(msg, "text/html");
        }

这样,点击导入按钮,即可上传并导入矣。

猴赛雷。

转载于:https://www.cnblogs.com/leftfist/p/6808770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值