目前我正在使用socket.io
上传带有进度条的视频。这是教程
但是 Internet Explorer 不支持这种方法,但我确实需要在所有浏览器中上传视频。
我检查了快递文件。由于 express 是基于node-formidable
(它有一个进度事件),我认为有办法构建一个带有进度条的上传系统,对吧?我就是不知道怎么办!
是否启用了强大的 IE 浏览器?
有什么方法可以在带有进度条的纯 espress.js 中构建文件上传系统吗?
目前我正在使用socket.io
上传带有进度条的视频。这是教程
但是 Internet Explorer 不支持这种方法,但我确实需要在所有浏览器中上传视频。
我检查了快递文件。由于 express 是基于node-formidable
(它有一个进度事件),我认为有办法构建一个带有进度条的上传系统,对吧?我就是不知道怎么办!
是否启用了强大的 IE 浏览器?
有什么方法可以在带有进度条的纯 espress.js 中构建文件上传系统吗?
它可以通过 xhr.upload 进度事件来完成。从 html5 开始支持它。
例如: https ://github.com/zeMirco/express-upload-progress
在 php 中,上传信息可以附加到会话中,因此它适用于 html4,也许也有一个 nodejs 扩展,我会谷歌它。
据此: How to do upload with express in node.js 在 express 中通过文件上传有一个进度事件,因此您可以在会话中使用实际进度数据设置一个变量,并从客户端使用 ajax 读取它。
这是使用Angular js 和ng-file-upload指令的jsfiddle 。
jsfiddle 适用于图像和文件,但要上传视频,您需要将 POST url 更改到您的服务器。
//inject angular file upload directives and services.
var app = angular.module('fileUpload', ['ngFileUpload']);
app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function($scope, Upload, $timeout) {
$scope.uploadFiles = function(file, errFiles) {
$scope.f = file;
$scope.errFile = errFiles && errFiles[0];
if (file) {
file.upload = Upload.upload({
url: 'https://angular-file-upload-cors-srv.appspot.com/upload',
data: {
file: file
}
});
file.upload.then(function(response) {
$timeout(function() {
file.result = response.data;
});
}, function(response) {
if (response.status > 0)
$scope.errorMsg = response.status + ': ' + response.data;
}, function(evt) {
file.progress = Math.min(100, parseInt(100.0 *
evt.loaded / evt.total));
});
}
}
}]);
.thumb {
width: 24px;
height: 24px;
float: none;
position: relative;
top: 7px;
}
form .progress {
line-height: 15px;
}
.progress {
display: inline-block;
width: 100px;
border: 3px groove #CCC;
}
.progress div {
font-size: smaller;
background: orange;
width: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://angular-file-upload.appspot.com/js/ng-file-upload-shim.js"></script>
<script src="https://angular-file-upload.appspot.com/js/ng-file-upload.js"></script>
<body ng-app="fileUpload" ng-controller="MyCtrl">
<h4>Upload on file select</h4>
<button type="file" ngf-select="uploadFiles($file, $invalidFiles)" ngf-max-height="1000" ngf-max-size="100MB">
Select File</button>
<br>
<br> File:
<div style="font:smaller">{{f.name}} {{errFile.name}} {{errFile.$error}} {{errFile.$errorParam}}
<span class="progress" ng-show="f.progress >= 0">
<div style="width:{{f.progress}}%"
ng-bind="f.progress + '%'"></div>
</span>
</div>
{{errorMsg}}
</body>