在Angularjs/Nodejs應用程序中發生文件上傳問題。Angularjs,文件上傳和IE9
我實施了這個angular-file-upload指令。使用它,文件上傳適用於所有現代瀏覽器,但在IE9中失敗。通過「失敗」我的意思是,它的行爲就像它的工作......我可以記錄文件上傳進度,並看到它逐步達到100%,成功處理程序觸發成功日誌消息(沒有在觸發錯誤處理程序),但該文件永遠不會出現在上傳目錄中(在同一臺計算機上)。
沒有任何控制檯錯誤,我將上傳目錄權限設置爲777以排除此錯誤。
,我發現是關閉...第一,在IE9上傳的文件從來沒有觸發日誌消息我已經把我的uploadPhoto功能,使路線似乎甚至不能打(上傳文件的思想在現代的那些事瀏覽器會觸發這些日誌消息)。另外,在上傳之後,在開發人員工具的網絡面板中,Type的值不應該是text/html,因爲它在下面。
(以下映射到:URL, Method, Result, Type, Received
):
/path/to/upload-dir/filename.jpg GET 200 text/html 20.7kb
這裏是我的文件上傳的處理程序:
$scope.onFileSelect = function ($file) {
$scope.ajaxVisible = true;
$scope.uploadError = false;
var photo = $file[0];
$scope.upload = $upload.upload({
url: '/upload/photo',
file: photo,
method: 'POST'
}).progress(function (evt) {
}).success(function (data, status, headers, config) {
$scope.toggleUploadForm();
$scope.imgsrc = 'path/to/upload/dir/' + photo.name;
User.currentUser.profile_image = photo.name;
User.updateUser();
$scope.ajaxVisible = false;
}).error(function (err) {
$scope.uploadError = true;
$scope.ajaxVisible = false;
});
};
以下是一個路由處理器(expressjs /節點):
app.post('/upload/photo', userAPI.uploadPhoto);
這是在路由處理程序中引用的uploadPhoto:
exports.uploadPhoto = function(req, res) {
logger.info('inside uploadPhoto'); // <-- never reached using IE9
var callbacks = {};
callbacks.uploadSuccess = function(){
res.json('success');
};
callbacks.uploadFailure = function(err){
res.json(400, 'Error uploading image.');
};
user.handlePhotoUpload(req.files, callbacks);
};
其中,終於,雙手的事關到:
this.handlePhotoUpload = function(params, callbacks) {
logger.log('inside handlePhotoUpload'); // <-- never reached using IE9
if(params.file.mime !== 'image/png' && params.file.mime !== 'image/jpeg' && params.file.mime !== 'image/gif') {
callbacks.uploadFailure('Wrong file type');
return;
}
fs.readFile(params.file.path, function(err, data){
if(err){
callbacks.uploadFailure(err);
}
var newPath = path.resolve("./path/to/upload/dir/" + params.file.filename);
fs.writeFile(newPath, data, function(err) {
if(err){
callbacks.uploadFailure(err);
}
callbacks.uploadSuccess();
});
});
};
該指令利用在後端的FileAPI library和需要Flash來處理上傳過程。我認爲Flash是問題的根源。我錯過了一些東西,但不知道它可能是什麼。
正如我所說,控制檯(在任何瀏覽器中)和文件上傳中的錯誤都顯示出工作的所有跡象,只是該文件從未出現在上傳目錄中。但是,通過IE9上傳時,通過現代瀏覽器上傳的各種日誌語句永遠不會到達。
有關如何解決此問題的建議與解決方案的建議一樣受歡迎。