• HTML5 文件域+FileReader 读取文件并上传到服务器(三)


    一、读取文件为blob并上传到服务器

    HTML

    <div class="container">
        <!--读取要上传的文件-->
        <input type="file" id="file"  />
        <input type="button" id="btn1" value="点击上传" onclick="uploadClick();" />
    </div>

    JS

    //读取图片实例,并上传到服务器
    var fileBox = document.getElementById('file');
    fileBox.onchange = function () {
        //获取选择文件的数组
        var fileList = fileBox.files;
        for (var i = 0; i < fileList.length; i++) {
            var file = fileList[i];
            uploadFile(file);
        }
    }
    //关键代码上传到服务器
    function uploadFile(file) {
        var reader = new FileReader();
        reader.readAsArrayBuffer(file);
        reader.onload = function () {
            var blob = new Blob([reader.result]);
            //提交到服务器
            var fd = new FormData();
            fd.append('file', blob);
            var ext = file.name.substring(file.name.lastIndexOf('.'));
            fd.append('extention', ext);
            fd.append('maxsize', 1024*1024*4);//Asp.net 默认一次上传最大4MB
            fd.append('isClip', -1);
            var xhr = new XMLHttpRequest();
            xhr.open('post', '../ashx/upload.ashx', true);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var data = eval('(' + xhr.responseText + ')');
                    console.info(data);
                    if (data.success) {
                        //上传成功
                        var imgName = data.msg;
                        alert(imgName);
                    } else {
                        alert(data.msg);
                    }
                }
            }
            //开始发送
            xhr.send(fd);
        }
    }

    后台C#处理关键代码:

    //接收文件
    HttpRequest req = _Context.Request;
    string newname = _fileInfo.CreateNewName(newExtention);
    //接收二级制数据并保存
    Stream stream = _PostedFile.InputStream;
    byte[] dataOne = new byte[stream.Length];
    stream.Read(dataOne, 0, dataOne.Length);
    FileStream fs = new FileStream(_fileInfo.TempFile + newname, FileMode.Create, FileAccess.Write);
    try
    {
        fs.Write(dataOne, 0, dataOne.Length);
    }
    finally
    {
        fs.Close();
        stream.Close();
    }
    return newname;

    二、读取图片文件,并上传到服务器

    HTML

    <div class="container">
        <!--图片类型验证方法1-->
        <input type="file" id="file" accept="image/*" />
        <input type="button" id="btn1" value="点击上传" onclick="uploadClick();" />
        <h4>选择文件如下:</h4>
        <img src="" id="img1" />
    </div>

    JS:

    //读取图片实例,并上传到服务器
    var fileBox = document.getElementById('file');
    fileBox.onchange = function () {
        //获取选择文件的数组
        var fileList = fileBox.files;
        for (var i = 0; i < fileList.length; i++) {
            var file = fileList[i];
            //图片类型验证第二种方式
            if (/image/w+/.test(file.type))
                readFile(file);
            else
                console.log(file.name + ':不是图片');
        }
    }
    //读取二进制图片文件,并上传到服务器
    function uploadClick() {
        var fileList = fileBox.files;
        for (var i = 0; i < fileList.length; i++) {
            var file = fileList[i];
            //图片类型验证第二种方式
            if (/image/w+/.test(file.type))
                uploadFile(file);
            else
                console.log(file.name + ':不是图片');
        }
    }
    //关键代码上传到服务器
    function uploadFile(file) {
        var reader = new FileReader();
        reader.readAsArrayBuffer(file);
        reader.onload = function () {
            var blob = new Blob([reader.result], { type: 'image/jpg' });
            //提交到服务器
            var fd = new FormData();
            fd.append('file', blob);
            var ext = file.name.substring(file.name.lastIndexOf('.'));
            fd.append('extention', ext);
            fd.append('isClip', -1);
            var xhr = new XMLHttpRequest();
            xhr.open('post', '../ashx/upload.ashx', true);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var data = eval('(' + xhr.responseText + ')');
                    console.info(data);
                    if (data.success) {
                        //上传成功
                        var imgName = data.msg;
                        alert(imgName);
                    } else {
                        alert(data.msg);
                    }
                }
            }
            //开始发送
            xhr.send(fd);
        }
    }
    //读取图片内容 为DataURL
    function readFile(file) {
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function (e) {
            var result = reader.result;
            $('.container blockquote').text(result);
            $('#img1').attr('src', result)
        }
    }

     后台关键代码处理同上。

    读取文件二:http://www.cnblogs.com/tianma3798/p/5839791.html

    读取文件一:http://www.cnblogs.com/tianma3798/p/4355949.html

  • 相关阅读:
    c语言 数组合并
    c++ 静态函数
    c++ 多继承 公有,私有,保护
    c++ 多继承 public
    stat用法:获取文件对应权限的数字
    sublime text3 (Mac) 快捷键
    c++ 多继承
    C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
    更换主机后SSH无法登录的问题
    ssh 连接不同无线网且IP以及用户名都相同
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5839810.html
Copyright © 2020-2023  润新知