Dropzone,Angular,MVC5 实现
Dropzone, Angular, MVC5 Implementation
Link 到空降区:https://github.com/enyo/dropzone
我正在尝试使用 dropzone 作为我的文件上传处理程序,使用 angularjs 和 MVC5。
问题是我似乎无法让 Http post 从 angularjs 服务转到 MVC 5 后端。
我想要 post 文件以及其他值,例如操作,以及一个名为 "values"
的字符串值
下面是代码(在服务中,angularjs)
sendProductFiles: function (act, file, val) {
return $http.post('/attributes/uploads', $.param({
action: act,
files: file,
values: val
}),
{
transformRequest: angular.identity,
headers: {
'Content-Type': undefined
}
})
}
控制中(angular)
$scope.intakeUpload = function (files) {
var fd = new FormData();
for (var i = 0; i < files.length; i++)
fd.append('file', files[i]);
AttributionViewService.sendProductFiles("addAttr", fd, $scope.selectedValues).then(function (res) {
}, function (err) {
});
}
Dropzone.options.myAwesomeDropzone = {
autoProcessQueue: false,
uploadMultiple: true,
parallelUploads: 100,
maxFiles: 100,
// Dropzone settings
init: function () {
var myDropzone = this;
this.element.querySelector("button[type=submit]").addEventListener("click", function (e) {
e.preventDefault();
e.stopPropagation();
myDropzone.processQueue();
});
this.on("sendingmultiple", function (files) {
$scope.intakeUpload(files);
});
this.on("addedfile", function (file) {
file.previewElement.addEventListener("click", function () { this.removeFile(file); });
});
}
}
在 MVC 5 控件中
[HttpPost]
[Route("attributes/uploads")]
public ActionResult AcceptUploads(string action, HttpPostedFile[] files, string values)
{
if (files.Length <= 0)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
foreach (var file in files)
{
System.Diagnostics.Debug.WriteLine(file.FileName);
}
System.Diagnostics.Debug.WriteLine(values);
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
在当前状态下,我收到 jquery 错误
jquery.js:8458 未捕获类型错误:非法调用
编辑,也尝试了以下方法:
Angular 服务
sendProductFiles: function (act, file, val) {
return $http.post('/attributes/uploads', $.param({
action: act,
files: file,
values: val
}), {
headers: {
'Content-Type': 'multipart/form-data'
}
})
已修复!
$scope.intakeUpload = function (files) {
var fd = new FormData();
for (var i = 0; i < files.length; i++)
fd.append('files', files[i]);
fd.append("action", "addAttr");
fd.append("values", $scope.selectedValues);
AttributionViewService.sendProductFiles(fd).then(function (res) {
}, function (err) {
});
}
[HttpPost]
[Route("attributes/uploads")]
public ActionResult AcceptUploads(string action, IEnumerable<HttpPostedFileBase> files, string values)
{
if (files.Count() <= 0)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
foreach (var file in files)
{
System.Diagnostics.Debug.WriteLine(file.FileName);
}
System.Diagnostics.Debug.WriteLine(values);
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Link 到空降区:https://github.com/enyo/dropzone
我正在尝试使用 dropzone 作为我的文件上传处理程序,使用 angularjs 和 MVC5。
问题是我似乎无法让 Http post 从 angularjs 服务转到 MVC 5 后端。
我想要 post 文件以及其他值,例如操作,以及一个名为 "values"
的字符串值下面是代码(在服务中,angularjs)
sendProductFiles: function (act, file, val) {
return $http.post('/attributes/uploads', $.param({
action: act,
files: file,
values: val
}),
{
transformRequest: angular.identity,
headers: {
'Content-Type': undefined
}
})
}
控制中(angular)
$scope.intakeUpload = function (files) {
var fd = new FormData();
for (var i = 0; i < files.length; i++)
fd.append('file', files[i]);
AttributionViewService.sendProductFiles("addAttr", fd, $scope.selectedValues).then(function (res) {
}, function (err) {
});
}
Dropzone.options.myAwesomeDropzone = {
autoProcessQueue: false,
uploadMultiple: true,
parallelUploads: 100,
maxFiles: 100,
// Dropzone settings
init: function () {
var myDropzone = this;
this.element.querySelector("button[type=submit]").addEventListener("click", function (e) {
e.preventDefault();
e.stopPropagation();
myDropzone.processQueue();
});
this.on("sendingmultiple", function (files) {
$scope.intakeUpload(files);
});
this.on("addedfile", function (file) {
file.previewElement.addEventListener("click", function () { this.removeFile(file); });
});
}
}
在 MVC 5 控件中
[HttpPost]
[Route("attributes/uploads")]
public ActionResult AcceptUploads(string action, HttpPostedFile[] files, string values)
{
if (files.Length <= 0)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
foreach (var file in files)
{
System.Diagnostics.Debug.WriteLine(file.FileName);
}
System.Diagnostics.Debug.WriteLine(values);
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
在当前状态下,我收到 jquery 错误 jquery.js:8458 未捕获类型错误:非法调用
编辑,也尝试了以下方法:
Angular 服务
sendProductFiles: function (act, file, val) {
return $http.post('/attributes/uploads', $.param({
action: act,
files: file,
values: val
}), {
headers: {
'Content-Type': 'multipart/form-data'
}
})
已修复!
$scope.intakeUpload = function (files) {
var fd = new FormData();
for (var i = 0; i < files.length; i++)
fd.append('files', files[i]);
fd.append("action", "addAttr");
fd.append("values", $scope.selectedValues);
AttributionViewService.sendProductFiles(fd).then(function (res) {
}, function (err) {
});
}
[HttpPost]
[Route("attributes/uploads")]
public ActionResult AcceptUploads(string action, IEnumerable<HttpPostedFileBase> files, string values)
{
if (files.Count() <= 0)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
foreach (var file in files)
{
System.Diagnostics.Debug.WriteLine(file.FileName);
}
System.Diagnostics.Debug.WriteLine(values);
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}