asp.mvc で ng-file-upload を使用してファイルをアップロードする方法は?
このコードを使用して、 asp.mvc の ng-file-upload でファイルをアップロードしています:
public class HomeController : Controller, IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
bool result;
try
{
HttpPostedFile file = context.Request.Files[0];
if (file.ContentLength > 0)
{
string nameFile = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath(Url.Content("~/Temp/")), nameFile);
file.SaveAs(path);
}
result = true;
}
catch (Exception exception)
{
result = false;
}
context.Response.Write(result);
}
public bool IsReusable
{
get
{
return false;
}
}
}
脚本 :
$scope.$watch('file', function (file) {
if (file&&!file.$error) {
$scope.upload($scope.file);
}
});
$scope.upload = function (file) {
Upload.upload({
url: getBaseUrl() + 'Home/ProcessRequest',
file: file
}).progress(function(evt) {
$scope.progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + $scope.progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
}).error(function (data, status, headers, config) {
console.log('error status: ' + status);
});
};
エラー :
POST http://localhost:1726/Home/ProcessRequest 500 (内部サーバー エラー) このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。
編集 :
私はこのコードを使用しています:
public class HomeController : Controller
{
[HttpPost]
[AllowUploadSpecialFilesOnly(".pdf,.doc,.docx,ppt,pptx,.mp3")]
public JsonResult Resume(HttpPostedFileBase file)
{
bool result;
try
{
if (file != null && file.ContentLength > 0 && file.FileName != null)
{
string nameFile = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);
var path = Path.Combine(Server.MapPath(Url.Content("~/Temp/")), nameFile);
file.SaveAs(path);
}
result = true;
}
catch (Exception exception)
{
result = false;
}
return Json(new
{
Result = result
}, JsonRequestBehavior.AllowGet);
}
}
html :
<form class="form-horizontal text-center" role="form" name="upload_form" >
<div class="form-group">
<div class="btn btn-primary" ngf-pattern="'.pdf,.doc,.docx,ppt,pptx,.mp3,.apk'" ngf-select ng-model="file">Send</div>
</div>
<span class="progress" ng-show="file.progress >= 0">
<div class="ng-binding" style="width:{{file.progress}}%" ng-bind="file.progress + '%'"></div>
</span>
</form>
スクリプト:
$scope.upload = function (file) {
Upload.upload({
url: getBaseUrl() + 'Home/Resume',
file: file
}).progress(function(evt) {
$scope.progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + $scope.progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
}).error(function (data, status, headers, config) {
console.log('error status: ' + status);
});
};
これでいいです。ただしprogressPercentage
、常に 100% ですが、ファイルはアップロードされています