Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Ng文件上载以将PDF Blob保存到数据库_Angularjs_Asp.net Mvc_Ng File Upload - Fatal编程技术网

Angularjs Ng文件上载以将PDF Blob保存到数据库

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/*"

我编辑这篇文章是为了展示我的最新尝试。 我一直在搜索论坛,试图找到一个解决方案。我有一个ASP.NETMVC应用程序,我在其中使用Angular。我正在尝试使用danialfarid/ng文件上传来允许用户上传PDF,然后将其作为二进制数据保存到数据库中(这不是我的想法,但我必须这样做)

我的HTML中有以下内容(摘自示例):

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}}}),它永远不会命中控制器方法。我错过了什么?