настоящее время я использую MEAN.js создать приложение, и я scaffolded простой объект, называемый кампании. Я хотел бы, чтобы каждая кампания имела связанное изображение. Поэтому я хотел бы изменить интерфейс CRUD, чтобы иметь возможность загрузить файл в конец.MEAN стек нг-загрузки-файлов
Я ввел нг-файл загрузите плагин для создания FE с угловыми. На стороне Node.js я установил плагин multer, чтобы помочь мне сохранить файл в папке (например, ./uploads). Дело в том, что я не совсем понял поток, и я надеялся на предложение.
Пожалуйста, найдите ниже точки зрения:
<section data-ng-controller="CampaignsController">
<div class="page-header">
<h1>New Campaign</h1>
</div>
<div class="col-md-12">
<form class="form-horizontal" data-ng-submit="create()" novalidate>
<fieldset>
<div class="form-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
<input type="text" data-ng-model="name" id="name" class="form-control" placeholder="Name" required>
</div>
</div>
<div class="form-group">
<button ng-file-select ng-model="token">Upload the token</button>
<div ng-file-drop ng-model="token" class="drop-box"
drag-over-class="{accept:'dragover', reject:'dragover-err', delay:100}"
accept="image/*">
Drop image file here
</div>
<div ng-no-file-drop>Image drop is not supported for this browser.</div>
</div>
<div class="form-group">
<input type="submit" class="btn btn-default">
</div>
<div data-ng-show="error" class="text-danger">
<strong data-ng-bind="error"></strong>
</div>
</fieldset>
</form>
</div>
</section>
Затем Угловая действие контроллера:
// Create new Campaign
$scope.create = function() {
// Create new Campaign object
var campaign = new Campaigns ({
name: this.name
});
$scope.$watch('token', function() {
$scope.upload = $upload.upload({
url: '/campaigns', //upload.php script, node.js route, or servlet url
method: 'POST', //Post or Put
headers: {'Content-Type': 'multipart/form-data'},
//withCredentials: true,
data: campaign, //from data to send along with the file
file: $scope.token, // or list of files ($files) for html5 only
//fileName: 'photo' // to modify the name of the file(s)
}).success(function (response, status) {
// Redirect after save
campaign.$save(function(response) {
$location.path('campaigns/' + response._id);
// Clear form fields
$scope.name = '';
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
}
).error(function (errorResponse) {
$scope.error = errorResponse.data;
//$scope.error = errorResponse.data.message;
});
});
};
Наконец, Node.js контроллер часть:
var mongoose = require('mongoose'),
errorHandler = require('./errors'),
multer = require('multer'),
Campaign = mongoose.model('Campaign'),
_ = require('lodash');
/**
* Create a Campaign
*/
exports.create = function(req, res) {
var campaign = new Campaign(req.body);
campaign.user = req.user;
multer({
dest: './uploads/'
});
campaign.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(campaign);
}
});
};
Прямо сейчас , что происходит, так это то, что - когда я пытаюсь загрузить файл - загрузчик не ждет, пока файл будет выбран, но он немедленно отправляет запрос POST (почему?). Более того, я получаю ответ 400.
Любое предложение было бы действительно оценено!
Благодаря Приветствия
на вашей $ watch функции убедитесь, что токен не пуст. Если файл очищен, все равно будет изменение, и, возможно, это причина, по которой он отправляет сообщение, когда вы нажимаете на select перед его фактическим выбором. – danial
Думаю, вам лучше разместить его в github плагина, поскольку он очень специфичен для этого плагина, или, по крайней мере, пометить его именем плагина. – danial
Есть несколько примеров nodejs плагина, в котором вы можете найти ссылку в документах. это может помочь вам. – danial