文件上传保存PDF的Blob到数据库

文件上传保存PDF的Blob到数据库

本文介绍了NG-文件上传保存PDF的Blob到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编辑这篇文章,以显示每下面的建议我的最新尝试。
我一直在寻找的论坛,试图找到一个解决方案。我有,我用角ASP.NET MVC应用程序。我试图用danialfarid / NG文件上传允许用户上传,然后得到保存到数据库二进制数据的PDF文件(不是我的主意,但我必须这样做的)。

I'm editing this post to show my latest attempt per suggestions below.I have been searching the forums trying to find a solution. I have an ASP.NET MVC Application in which I use Angular. I am trying to use danialfarid/ng-file-upload to allow users to upload PDFs which then get saved to the database as binary data (not my idea, but I have to do it that way).

我有以下的(从实例所)在我的HTML:

I have the following (taken from the examples) in my 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>

这在我的角度控制器:

And this in my Angular controller:

$scope.uploadPic = function (files) {
    file.upload = Upload.upload({
        url: '/SSQV4/SSQV5/Document/UploadEMRDocument',
        data: {file: files}
    })
}

我的MVC控制器:

My MVC Controller:

 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();


        }
    }
}

这code从不打MVC控制器都没有。我显然失去了一些东西,但我没有丝毫线索,可能是什么。任何援助大大AP preciated!

This code never hits the MVC Controller at all. I'm obviously missing something, but I haven't the slightest clue as to what it could be. Any assistance is greatly appreciated!

推荐答案

您需要将文件内容提取出来的表单数据。

You need to extract the file content out of the form data.

下面是我如何做到这一点(以同样的方式使用 NG-文件上传为您从前端)上传我的应用程序的附件。

Below is how I do this (using ng-file-upload in the same manner as you from the front end) to upload attachments in my application.

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();
}

这篇关于NG-文件上传保存PDF的Blob到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 18:30