Проблемы с загрузкой файлов в приложении Angularjs/Nodejs.Angularjs, Загрузка файлов и IE9
Я внедрил эту директиву angular-file-upload. Используя его, загрузка файлов работает во всех современных браузерах, но в IE9 он не работает. Под «fail» я имею в виду, что он работает так, как будто он работает ... Я могу зарегистрировать ход загрузки файла и увидеть, что он постепенно достигает 100%, сообщение успешного журнала запускается в обработчике успеха (ничего не запускается в обработчике ошибок), но файл никогда не появляется в каталоге загрузки (на том же компьютере).
Нет никаких консольных ошибок любого типа, и я устанавливаю разрешения на загрузку каталога на 777, чтобы исключить это.
вещи, которые я нашел, что выключены ... первых, файлы, загруженные в IE9 не вызывают сообщения журнала я поместил в моей функции uploadPhoto поэтому маршрут, кажется, даже не ударять (мыслительные файлы загружены в современных браузеры DO запускают эти сообщения журнала). Кроме того, после загрузки на панели «Сеть» инструментов разработчика значение для типа не должно быть 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 при загрузке через современный браузер никогда не достигаются различные операторы журналов.
Рекомендации по устранению неполадок также приветствуются, как предложения решений.