Angularjs Ng文件上载以将PDF Blob保存到数据库
我编辑这篇文章是为了展示我的最新尝试。 我一直在搜索论坛,试图找到一个解决方案。我有一个ASP.NETMVC应用程序,我在其中使用Angular。我正在尝试使用danialfarid/ng文件上传来允许用户上传PDF,然后将其作为二进制数据保存到数据库中(这不是我的想法,但我必须这样做) 我的HTML中有以下内容(摘自示例):Angularjs Ng文件上载以将PDF Blob保存到数据库,angularjs,asp.net-mvc,ng-file-upload,Angularjs,Asp.net Mvc,Ng File Upload,我编辑这篇文章是为了展示我的最新尝试。 我一直在搜索论坛,试图找到一个解决方案。我有一个ASP.NETMVC应用程序,我在其中使用Angular。我正在尝试使用danialfarid/ng文件上传来允许用户上传PDF,然后将其作为二进制数据保存到数据库中(这不是我的想法,但我必须这样做) 我的HTML中有以下内容(摘自示例): File:<input type="file" ngf-select ng-model="picFile" name="file" accept="image/*"
File:<input type="file" ngf-select ng-model="picFile" name="file" accept="image/*" ngf-max-size="2MB" required ngf-model-invalid="errorFile"><br />
<img ngf-thumbnail="picFile" class="thumb"> <button ng-click="picFile = null" ng-show="picFile">Remove</button><br />
<button type="button" class="btn btn-primary" ng-click="uploadPic(picFile)">Upload</button>
我的MVC控制器:
$scope.uploadPic = function (files) {
file.upload = Upload.upload({
url: '/SSQV4/SSQV5/Document/UploadEMRDocument',
data: {file: files}
})
}
namespace SSQV5.Controllers
{
public class DocumentController : ApiController
{
public async Task<IHttpActionResult> UploadEMRDocument()
{
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var f = provider.Contents.First(); // assumes that the file is the only data
if (f != null)
{
var filename = f.Headers.ContentDisposition.FileName.Trim('\"');
filename = Path.GetFileName(filename);
var buffer = await f.ReadAsByteArrayAsync();
//buffer now contains the file content,
//and filename has the original filename that was uploaded
//do some processing with it (e.g. save to database)
}
else
{
return BadRequest("Attachment failed to upload");
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
return Ok();
}
}
}
名称空间SSQV5.Controllers
{
公共类DocumentController:ApicController
{
公共异步任务上载emrdocument()
{
尝试
{
var provider=新的MultipartMemoryStreamProvider();
wait Request.Content.ReadAsMultipartAsync(提供程序);
var f=provider.Contents.First();//假定该文件是唯一的数据
如果(f!=null)
{
var filename=f.Headers.ContentDisposition.filename.Trim(“\”);
filename=Path.GetFileName(filename);
var buffer=wait f.ReadAsByteArrayAsync();
//缓冲区现在包含文件内容,
//并且文件名具有上载的原始文件名
//对其进行一些处理(例如保存到数据库)
}
其他的
{
返回请求(“附件上传失败”);
}
}
捕获(例外情况除外)
{
返回请求(例如消息);
}
返回Ok();
}
}
}
这段代码根本没有击中MVC控制器。我显然遗漏了一些东西,但我一点也不知道它可能是什么。非常感谢您的帮助!在配置上载时,请指定文件将发布到的URL:
file.upload = Upload.upload({
url: 'myMVC/MyMethod',
data: {file: file}
})
您需要从表单数据中提取文件内容 下面是我如何在我的应用程序中上传附件的方法(使用与前端相同的方式
ng file upload
)
public async Task<IHttpActionResult> UploadAttachment()
{
// Check if the request contains multipart/form-data.
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var f = provider.Contents.First(); // assumes that the file is the only data
if (f != null)
{
var filename = f.Headers.ContentDisposition.FileName.Trim('\"');
filename = Path.GetFileName(filename);
var buffer = await f.ReadAsByteArrayAsync();
//buffer now contains the file content,
//and filename has the original filename that was uploaded
//do some processing with it (e.g. save to database)
}
else
{
return BadRequest("Attachment failed to upload");
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
return Ok();
}
public异步任务上传附件()
{
//检查请求是否包含多部分/表单数据。
尝试
{
var provider=新的MultipartMemoryStreamProvider();
wait Request.Content.ReadAsMultipartAsync(提供程序);
var f=provider.Contents.First();//假定该文件是唯一的数据
如果(f!=null)
{
var filename=f.Headers.ContentDisposition.filename.Trim(“\”);
filename=Path.GetFileName(filename);
var buffer=wait f.ReadAsByteArrayAsync();
//缓冲区现在包含文件内容,
//并且文件名具有上载的原始文件名
//对其进行一些处理(例如保存到数据库)
}
其他的
{
返回请求(“附件上传失败”);
}
}
捕获(例外情况除外)
{
返回请求(例如消息);
}
返回Ok();
}
我试过了。当它点击MVC控制器时,它为null。这会给我所有类型的错误:System.Web.HttpRequestBase不包含“内容”的定义,名称“路径”在当前上下文中不存在,名称“BadRequest”在当前上下文中不存在。这肯定缺少很多其他代码或使用语句。你能告诉我还需要什么吗?这给了我各种各样的错误,但是一个小研究表明我需要从ApiController继承。但是,使用以下代码:$scope.uploadPic=function(file){file.upload=upload.upload({url:'/SSQV4/SSQV5/Document/UploadEMRDocument',data:{file:file}}}),它永远不会命中控制器方法。我错过了什么?