大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果你是用这种方式上传的话,确实没有好方法。
成都创新互联公司是专业的大方网站建设公司,大方接单;提供做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大方网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
因为 XMLHttpRequest.onProgress 事件能拿到的是网络传输的字节而已;你说的问题里,“上传进度已完成”,实际是指浏览器已经把文件传输给了服务端;“很久才可以”,是你服务端额外处理的时间,这段时间对浏览器来说是不可感知的,它怎么会知道你服务端处理需要多久呢?
一般处理思路有这么几种:
1、上传进度设置一个最大值,比如 99%,只有当服务端真正返回结果时才会变到 100%,这种方法最为简单粗暴;
2、尽量减少服务端处理的时间,例如收到文件后交给异步队列去处理,立刻返回给客户端响应,这种方法需要额外做的事件比较多,开发难度更高一些;
3、客户端分片上传,把大文件变成若干段小“文件”,缺点是浏览器只有支持 HTML5 才支持 FormData 分片。
拖放支持:
可以从您的桌面或文件管理器中拖放他们在您的浏览器窗口中上传文件。
上传进度条:
显示一个进度条显示为单独的文件和所有上传组合上传进度。
可取消上传:
单个文件上传可以取消来停止上传进度。
可恢复上传:
中止的上传可以与浏览器支持的Blob API进行恢复。
分块上传:
大文件可以上传较小的块与浏览器支持的Blob的API 。
客户端图像大小调整:
图像可以自动调整大小的客户端与浏览器支持所需的JS API的。
预览图像,音频和视频:
图像,音频和视频文件的预览可以与浏览器支持所需的API上传前显示。
前端要做的就是设置一个定时器通过接口去后台获取当前上传进度是多少,然后渲染出进度条就行。当进度达到100%时清除定时器。
ajax的表单提交只能提交data数据到后台,没法实现file文件的上传还有展示进度功能,这里用到form.js的插件来实现,搭配css样式简单易上手,而且高大上,推荐使用。
需要解释下我的结构, #upload-input-file 的input标签是真实的文件上传按钮,包裹form标签后可以实现上传功能, #upload-input-btn 的button标签是展示给用户的按钮,因为需要样式的美化。上传完成生成的文件名将会显示在 .upload-file-result 里面, .progress 是进度条的位置,先让他隐藏加上 hidden 的class, .progress-bar 是进度条的主体, .progress-bar-status 是进度条的文本提醒。
去掉hidden的class,看到的效果是这样的
[图片上传失败...(image-2c700a-1548557865446)]
将上传事件绑定在file的input里面,绑定方式就随意了。
var progress = $(".progress-bar"), status = $(".progress-bar-status"), percentVal = '0%'; //上传步骤 $("#myupload").ajaxSubmit({ url: uploadUrl, type: "POST", dataType: 'json', beforeSend: function () { $(".progress").removeClass("hidden"); progress.width(percentVal); status.html(percentVal); }, uploadProgress: function (event, position, total, percentComplete) { percentVal = percentComplete + '%'; progress.width(percentVal); status.html(percentVal); console.log(percentVal, position, total); }, success: function (result) { percentVal = '100%'; progress.width(percentVal); status.html(percentVal); //获取上传文件信息 uploadFileResult.push(result); // console.log(uploadFileResult); $(".upload-file-result").html(result.name); $("#upload-input-file").val(''); }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log(errorThrown); $(".upload-file-result").empty(); } });
[图片上传失败...(image-3d6ae0-1548557865446)]
[图片上传失败...(image-9f0adf-1548557865446)]
更多用法可以 参考官网
需要准备的材料分别有:电脑、html编辑器、浏览器。
1、首先,打开html编辑器,新建html文件,例如:index.html,并引入jquery。
2、在index.html中的script标签,输入jquery代码:
$('button').click(function () {
$('body').append('span正在上传中/span');
setTimeout("$('span').text('上传成功');", 1000);
});
3、浏览器运行index.html页面,点击提交按钮,显示了“正在上传中”。
4、例如过了1秒后变成了上传成功的提示。