Я думаю, что нашел очень простой способ сделать глубокую копию ArrayList. Предполагая, что вы хотите скопировать массив String ArrayList.
ArrayList<String>arrayB = new ArrayList<String>();
arrayB.addAll(arrayA);
Сообщите мне, если это не сработает для вас.
Не сериализуйте FormData
с POST
на сервере. Сделайте это:
this.uploadFileToUrl = function(file, title, text, uploadUrl){
var payload = new FormData();
payload.append("title", title);
payload.append('text', text);
payload.append('file', file);
return $http({
url: uploadUrl,
method: 'POST',
data: payload,
//assign content-type as undefined, the browser
//will assign the correct boundary for us
headers: { 'Content-Type': undefined},
//prevents serializing payload. don't do it.
transformRequest: angular.identity
});
}
Затем используйте его:
MyService.uploadFileToUrl(file, title, text, uploadUrl).then(successCallback).catch(errorCallback);
Вы отправляете JSON-форматированные данные на сервер, который не ожидает этого формата. Вы уже предоставили формат, который нужен серверу, поэтому вам нужно отформатировать его самостоятельно, что довольно просто.
var data = '"title='+title+'" "text='+text+'" "file='+file+'"';
$http.post(uploadUrl, data)
Вот полное решение
html code,
blockquote>создает поля для загрузки текстовых файлов anf, как показано ниже
<div class="form-group"> <div> <label for="usr">User Name:</label> <input type="text" id="usr" ng-model="model.username"> </div> <div> <label for="pwd">Password:</label> <input type="password" id="pwd" ng-model="model.password"> </div><hr> <div> <div class="col-lg-6"> <input type="file" file-model="model.somefile"/> </div> </div> <div> <label for="dob">Dob:</label> <input type="date" id="dob" ng-model="model.dob"> </div> <div> <label for="email">Email:</label> <input type="email"id="email" ng-model="model.email"> </div> <button type="submit" ng-click="saveData(model)" >Submit</button>
директивный код
blockquote>создать директиву filemodel для анализа файла
.directive('fileModel', ['$parse', function ($parse) { return { restrict: 'A', link: function(scope, element, attrs) { var model = $parse(attrs.fileModel); var modelSetter = model.assign; element.bind('change', function(){ scope.$apply(function(){ modelSetter(scope, element[0].files[0]); }); }); } };}]);
Код службы
] blockquote>добавьте файл и поля для формирования данных и сделайте $ http.post, как показано ниже, чтобы сохранить «Content-Type»: undefined
.service('fileUploadService', ['$http', function ($http) { this.uploadFileToUrl = function(file, username, password, dob, email, uploadUrl){ var myFormData = new FormData(); myFormData.append('file', file); myFormData.append('username', username); myFormData.append('password', password); myFormData.append('dob', dob); myFormData.append('email', email); $http.post(uploadUrl, myFormData, { transformRequest: angular.identity, headers: {'Content-Type': undefined} }) .success(function(){ }) .error(function(){ }); } }]);
В контроллере
blockquote>Теперь в контроллере вызов службы, посылая необходимые данные, добавляемые в параметры,
$scope.saveData = function(model){ var file = model.myFile; var uploadUrl = "/api/createUsers"; fileUpload.uploadFileToUrl(file, model.username, model.password, model.dob, model.email, uploadUrl); };
Используя $resource
в AngularJS, вы можете сделать:
task.service.js
$ngTask.factory("$taskService", [
"$resource",
function ($resource) {
var taskModelUrl = 'api/task/';
return {
rest: {
taskUpload: $resource(taskModelUrl, {
id: '@id'
}, {
save: {
method: "POST",
isArray: false,
headers: {"Content-Type": undefined},
transformRequest: angular.identity
}
})
}
};
}
]);
И затем использовать его в модуле:
task.module.js
$ngModelTask.controller("taskController", [
"$scope",
"$taskService",
function (
$scope,
$taskService,
) {
$scope.saveTask = function (name, file) {
var newTask,
payload = new FormData();
payload.append("name", name);
payload.append("file", file);
newTask = $taskService.rest.taskUpload.save(payload);
// check if exists
}
}
Это никогда не сработает, вы не можете укрепить свой объект FormData.
Вы должны сделать это:
this.uploadFileToUrl = function(file, title, text, uploadUrl){
var fd = new FormData();
fd.append('title', title);
fd.append('text', text);
fd.append('file', file);
$http.post(uploadUrl, obj, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
})
.success(function(){
blockUI.stop();
})
.error(function(error){
toaster.pop('error', 'Errore', error);
});
}