AI编程助手
AI免费问答

H5的文件域FileReader怎样分段读取文件上传到服务器

php中世界最好的语言   2018-01-29 10:26   2486浏览 原创

这次给大家带来h5的文件域filereader怎样分段读取文件上传到服务器,h5的文件域filereader分段读取文件上传到服务器的注意事项有哪些,下面就是实战案例,一起来看一下。

说明:使用Ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续Ajax请求会使后台崩溃,获取InputStream中数据会为空,尤其在Google浏览器测试过程中。

1.简单分段读取文件为Blob,ajax上传到服务器

<div>
    <div>
        <div>分段读取文件:</div>
        <div>
            <input>
            <blockquote></blockquote>
        </div>
    </div>
</div>

JS:

/*
* 分段读取文件为blob ,并使用ajax上传到服务器
* 分段上传exe文件会抛出异常
*/
var fileBox = document.getElementById('file');
file.onchange = function () {
    //获取文件对象
    var file = this.files[0];
    var reader = new FileReader();
    var step = 1024 * 1024;
    var total = file.size;
    var cuLoaded = 0;
    console.info("文件大小:" + file.size);
    var startTime = new Date();
    //读取一段成功
    reader.onload = function (e) {
        //处理读取的结果
        var loaded = e.loaded;
        //将分段数据上传到服务器
        uploadFile(reader.result, cuLoaded, function () {
            console.info('loaded:' + cuLoaded + 'current:' + loaded);
            //如果没有读完,继续
            cuLoaded += loaded;
            if (cuLoaded <p>后台代码:</p><pre class="brush:php;toolbar:false">/// <summary>
/// upload2 的摘要说明
/// </summary>
public class upload2 : IHttpHandler
{
    LogHelper.LogHelper _log = new LogHelper.LogHelper();
    int totalCount = 0;
    public void ProcessRequest(HttpContext context)
    {
        HttpContext _Context = context;
        //接收文件
        HttpRequest req = _Context.Request;
        if (req.Files.Count <p>2.分段读取文件为blob ,并使用ajax上传到服务器,追加中止、继续功能操作</p><pre class="brush:php;toolbar:false"><div>
    <div>
        <div>分段读取文件:</div>
        <div>
            <input>
            <br>
            <input> 
            <input>
            <br>
            <progress></progress>
            <blockquote></blockquote>
        </div>
    </div>
</div>

JS:

/*
* 分段读取文件为blob ,并使用ajax上传到服务器
* 使用Ajax方式提交上传数据文件大小应该有限值,最好500MB以内
* 原因短时间过多的ajax请求,Asp.Net后台会崩溃获取上传的分块数据为空
* 取代方式,长连接或WebSocket
*/
var fileBox = document.getElementById('file');
var reader = null;  //读取操作对象
var step = 1024 * 1024 * 3.5;  //每次读取文件大小
var cuLoaded = 0; //当前已经读取总数
var file = null; //当前读取的文件对象
var enableRead = true;//标识是否可以读取文件
fileBox.onchange = function () {
    //获取文件对象
    file = this.files[0];
    var total = file.size;
    console.info("文件大小:" + file.size);
    var startTime = new Date();
    reader = new FileReader();
    //读取一段成功
    reader.onload = function (e) {
        //处理读取的结果
        var result = reader.result;
        var loaded = e.loaded;
        if (enableRead == false)
            return false;
        //将分段数据上传到服务器
        uploadFile(result, cuLoaded, function () {
            console.info('loaded:' + cuLoaded + '----current:' + loaded);
            //如果没有读完,继续
            cuLoaded += loaded;
            if (cuLoaded <p>后台代码同上</p><p>相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!</p><p>相关阅读:</p><p><a href="http://www.php.cn/div-tutorial-385778.html" target="_blank">在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值</a><br></p><p><a href="http://www.php.cn/div-tutorial-385766.html" target="_blank">在html中怎样可以用超链接打开新窗口并且控制窗口属性</a><br></p><p><a href="http://www.php.cn/div-tutorial-385760.html" target="_blank">怎样使用a标签的href属性与onclick事件</a><br></p><p><a href="http://www.php.cn/div-tutorial-385709.html" target="_blank">HTML标签嵌套的详细规则</a><br></p>
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。