• 通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。


    工作记录用

    1 大概页面,点击选择按钮,选择文件,填写备注并可以上传前预览,然后点击上传按钮开始上传

    2 html+js代码

    <h2>Test</h2>
    <div id="fileList"></div>
    <span id="file_ct" style="display:none"><input id="file_input" accept="Image/*" type="file" multiple onchange="onFileChange()" /></span>
    <a href="#" class="buttom btn-small" onclick="document.getElementById('file_input').click()">选择图片</a>
    <a href="#" class="buttom btn-small" onclick="Upload()">上传</a>
    
    <script type="text/javascript">
        var formData;
        function onFileChange() {
            formData = new FormData();//清空FormData中的数据
            $("#fileList").html(''); // 清空列表
    
            var Upload = document.getElementById("file_input");
            var fileList = Upload.files;
            for (let i = 0; i < fileList.length; i++) {
                var file = fileList[i];
                if ((file.size / 1024 / 1024) > 10) {
                    alert("图片超过10MB,超过限制大小。");
                    return;
                }
                $("#fileList").append("<tr><td>" + file.name + " 备注:<input  type='text' name='Remark_After' /><img  style='200px;height:200px;' id='Img_After_" + i + "' src='' alt='' /><input type='button' value='上传预览' onclick='preview1(" + i + ")'/></td></tr>");
                formData.append("Image_After_" + i, file);
            }
            // 避免第二次点击无效
            $("#file_input").remove();
            $("#file_ct").append("<input id='file_input' accept='Image/*' type='file' multiple onchange='onFileChange()' />");
        };
        function preview1(i) {
            let reader
            if (formData.get("Image_After_" + i)) {
                reader = new FileReader()
                reader.readAsDataURL(formData.get("Image_After_" + i))
            }
            reader.onload = function (e) {
                document.getElementById('Img_After_' + i).src = e.target.result
            }
        }
        function Upload()
        {
            var request = new XMLHttpRequest();
            request.open('post', '@Url.Content("~/Home/TestUpload")', true);
            request.onload = function (e) {
                console.log(e);
            }
            $("input[name='Remark_After']").each(function (index, e) {
                formData.append("Remark_After_" + index, $(e).val());
            });
    
            request.send(formData);  //发送请求
            request.onreadystatechange = function () {
                //若响应完成且请求成功
                if (request.readyState === 4 && request.status === 200) {
                    alert('操作成功。');
                }
            }
        }
    </script>

     3  C# 后台代码

    public void TestUpload()
            {
                string basePath = HttpRuntime.BinDirectory;
                if (!Directory.Exists(Url.Content($"{basePath}/UploadImage")))
                {
                    Directory.CreateDirectory(Url.Content($"{basePath}/UploadImage"));
                }
                foreach (string fileName in Request.Files)
                {
                    HttpPostedFileBase file = Request.Files[fileName];
                    // 生成唯一的文件名称,避免同名覆盖
                    file.SaveAs(Url.Content($"{basePath}/UploadImage/{Guid.NewGuid().ToString()}.{file.ContentType.Split('/')[1]}"));
                }
            }

    完成 ,再见 th

    formdata 是真的好用

  • 相关阅读:
    IDEA新建项目时,没有Spring Initializr选项
    idea 不下载jar包
    eclipse安装activiti designer
    idea上activiti插件的安装及使用
    activiti实战--第二章--搭建Activiti开发环境及简单示例
    activiti实战--第一章--认识Activiti
    jdk1.8中的for循环
    [原][bigemap][globalmapper]通过bigemap下载全球30米DEM高程数据(手动下载)(下载全球高精度dom卫片、影像、等高线、矢量路网、POI、行政边界)
    [转]OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
    [转]osgconv工具简介
  • 原文地址:https://www.cnblogs.com/lixipeng/p/11690199.html
Copyright © 2020-2023  润新知