文件上传,"这次交卷,坚决不改了"

1.EasyUI绑定一个文件列表和列表的菜单

<table id="bugImages_dg" data-options="fit:true">
</table>
<div id="bugImages_toolbar" class="datagrid-toolbar">
    <table cellspacing="0" cellpadding="0">
        <tbody>
            <tr>
                <td>
                    <a href="javascript:void(0);" class="l-btn l-btn-plain" onclick="bugImages_add()">
                        <span class="l-btn-left"><span class="l-btn-text icon-add l-btn-icon-left">上传</span></span>
                    </a>
                </td>
                <td>
                    <a href="javascript:void(0);" class="l-btn l-btn-plain" onclick="bugImages_download()">
                        <span class="l-btn-left"><span class="l-btn-text icon-application_edit l-btn-icon-left">下载</span></span>
                    </a>
                </td>
            </tr>
        </tbody>
    </table>
</div>

2.文件列表的绑定方法

function bugImageBind() {
    var bugId = $("#hiddenBugId").val();

    $("#bugImages_dg").datagrid({
        url: "/BugImages/bugImagesJson.ashx" ,
        queryParams: { uptype: 0, bugId: bugId },
        striped: true, rownumbers: false, pagination: false, pageSize: 30, singleSelect: true,
        idField: ‘Id‘,
        sortName: ‘Id‘,
        sortOrder: ‘desc‘,
        pageList: [20, 30, 40, 60, 80, 100],
        columns: [[
            { field: ‘imageId‘, title: ‘文件Id‘, hidden: true },
            { field: ‘bugId‘, title: ‘缺陷Id‘, hidden: true },
            { field: ‘text‘, title: ‘文件名称‘, width:250 },
            { field: ‘creatorId‘, title: ‘上传人Id‘, hidden: true },
            { field: ‘createDate‘, title: ‘上传时间‘, width: 150 }
        ]],
        toolbar: ‘#bugImages_toolbar‘
    });

    $("#bugImages_dg").datagrid(‘clearSelections‘).datagrid(‘clearChecked‘);
}

3.Ajax上传所用的iframe表单

<div style="display: none;">
    <form id="formUpload" name="formToUpload" method="post" action="" enctype="multipart/form-data" target="msgframe">
        <input id="fileToUpload" type="file" size="45" name="fileToUpload" />
    </form>
</div>
<iframe id="msgframe" name="msgframe" style="display: none;"></iframe>
<iframe id="downloadFrame" name="downloadFrame" style="display: none;" src=""></iframe>

4.选中文件的触发和上传方法

//缺陷附件上传
function bugImages_add() {
    $("#fileToUpload").click();

    var bugId = $("#hiddenBugId").val();
    var user = $("#hiddenUser").val();

    $("#formUpload").attr("action", "/BugImages/bugImagesJson.ashx?uptype=1&bugId=" + bugId + "&creatorId=" + user);

    timeout = setTimeout("checkFile()", 1000);
}

var timeout;
function checkFile() {
    var fileInput = $("#fileToUpload");
    if (fileInput.val() == "" || fileInput.val() == null) {
        timeout = setTimeout("checkFile()", 1000);
    } else {
        if (fileInput.get(0).files) {
            var fileSize = fileInput.get(0).files[0].size;
            if (fileSize > 2 * 1024 * 1024) {
                alert(‘上传文件不能超过2M‘);
            } else {
                clearTimeout(timeout);
                $("#formUpload").submit();
                $("#fileToUpload").val("");
            }
        } else {
            alert(‘附件上传不支持IE10以下版本浏览器‘);
            clearTimeout(timeout);
            $("#fileToUpload").val("");
        }
    }
}

5.上传服务器端处理

string s = string.Empty;
string msg = "window.parent.bugImageBind();";
string strReturn =
@"
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type=‘text/javascript‘>
        @msg
    </script>
</head>
<body>
</body>
</html>
";
try
{
    var file = context.Request.Files["fileToUpload"];
    //保存
    if (file != null && file.ContentLength > 0 && file.ContentLength <= 2 * 1024 * 1024)
    {
        string[] ieBugStrings = file.FileName.Replace("\\", "&").Split(‘&‘);
        string fileName = ieBugStrings[ieBugStrings.Length - 1];

        string path = context.Server.MapPath("~") + "Upfiles\\" + fileName;
        if (File.Exists(path))
            File.Delete(path);

        file.SaveAs(path);

        FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
        Byte[] byteData = new Byte[fileStream.Length];
        fileStream.Read(byteData, 0, byteData.Length);
        fileStream.Close();

        bugImagesDataModel bug = new bugImagesDataModel();
        bug.bugId = context.Request["bugId"];
        bug.imageData = byteData;
        bug.text = fileName;
        bug.creatorId = context.Request["creatorId"];
        bug.createDate = DateTime.Now;

        using (BugImagesServiceClient svc = new BugImagesServiceClient())
        {
            svc.AddbugImages(bug, ref s);
        }

        if (File.Exists(path))
            File.Delete(path);
    }
    else
    {
        msg = "alert(‘附件不能超过2M‘);";
    }
}
catch (Exception ex)
{
    msg = "alert(‘" + ex + "‘);";
}

context.Response.ContentType = "text/html";
context.Response.Write(strReturn.Replace("@msg", msg));

6.下载事件

function bugImages_download() {
    var bugImage = $("#bugImages_dg").datagrid(‘getSelected‘);
    if (bugImage) {
        $("#downloadFrame").attr("src", "/BugImages/bugImagesJson.ashx?uptype=2&imageId=" + bugImage.imageId);
    } else {
        alert("请先选择要下载的附件");
    }
}

7.下载服务器端处理

string imageId = context.Request["imageId"];
string s = string.Empty;
bugImagesDataModel[] models;
using (BugImagesServiceClient svc = new BugImagesServiceClient())
{
    string searchString = "where imageId=‘" + imageId + "‘";
    string orderString = "order by createDate desc";
    models = svc.GetbugImagesDataList(searchString, orderString, 0, 10000, ref s);
}
if (models.Length > 0)
{
    byte[] byteImg = models[0].imageData;
    context.Response.Buffer = false;
    context.Response.ContentType = "image/jpg";
    context.Response.AddHeader("Content-Disposition", "attachment;filename=" + models[0].text);
    context.Response.BinaryWrite(byteImg);//写入二进制流
    context.Response.End();
}
时间: 2024-10-05 05:01:47

文件上传,"这次交卷,坚决不改了"的相关文章

post提交/文件上传

第一步:修改在php5下POST文件大小的限制 1.编修php.ini 找到:max_execution_time = 30 ,这个是每个脚本运行的最长时间,单位秒,修改为: max_execution_time = 150 找到:max_input_time = 60,这是每个脚本可以消耗的时间,单位也是秒,修改为: max_input_time = 300 找到:memory_limit = 128M,这个是脚本运行最大消耗的内存,根据你的需求更改数值,这里修改为: memory_limit

python爬虫:Multipart/form-data POST文件上传详解

简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form method="post"action="http://w.sohu.com" > <inputtype="text" name="txt1"> <inputtype="text" name="txt2"> </form

jQuery插件之路(三)——文件上传(支持拖拽上传)

好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下,上传文件的时候需要利用的一些必要的知识. 首先我们要说的就是FileReader对象,这是一个HTML5提出的,专门用来异步的读取用户计算机上文件的对象,这里有详细的介绍.所以如果我们想要使用它,那么首先我们得先创建一个FileReader对象. var fr = new FileReader()

文件上传-------头像上传预览

这次来讲怎么来用代码完成头像更换 在上篇博客中也说了图片上传,但选择文件的之后,在网页上并没有显示这张图片,如果是要做头像的话,最好有头像预览 就像平时我们换QQ头像那样,一点图片就会出来文件预览,然后再选择一张图片,点击,页面就会换成你刚刚点击的那张图片 来看一下做法,先说第一个页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/D

Multipart/form-data POST文件上传详解

简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form method="post"action="http://w.sohu.com" > <inputtype="text" name="txt1"> <inputtype="text" name="txt2"> </form

MVC&amp;WebForm对照学习:文件上传(以图片为例)

在web应用中,文件上传是个很普遍的功能,那么今天就来小结一下asp.net中文件上传的方式.首先我们快速来回忆一下WebForm中的文件上传的方法. Part 1 WebForm中的文件上传  FileUpload服务器控件 aspx: <div> <asp:Image ImageUrl="~/uploads/1.jpg" ID="img2" runat="server" Width="150px" Hei

nodejs 实现简单的文件上传功能

首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传功能,优点:浏览器兼容好. 3.通过xhr level2的异步请求,可以百度formData对象. 这里使用2做个练习. node插件请看下package.json文件 { "name": "upload", "version": "0.1

Struts2入门(七)——Struts2的文件上传和下载

一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST"方式,并且将enctype属性设置为"multipart/form-data",该属性的默认值为"application/x-www-form-urlencoded",就是说,表单要写成以下这种形式: <form action="" metho

iOS开发——网络编程OC篇&amp;(七)文件上传

一.文件上传的步骤1.设置请求头* 目的:告诉服务器请求体里面的内容并非普通的参数,而是包含了文件参数[request setValue:@"multipart/form-data; boundary=iCocos" forHTTPHeaderField:@"Content-Type"]; 2.设置请求体* 作用:存放参数(文件参数和非文件参数)1> 非文件参数[body appendData:iCocosEncode(@"--iCocos\r\n&

文件上传漏洞原理与实例测试

0x00 什么是文件上传 为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率.企业支持门户,给用户各企业员工有效地共享文件.允许用户上传图片,视频,头像和许多其他类型的文件.向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的. 0x01 为什么文件上传存在漏洞 上传文件的时候,如果服务器脚本语言