【问题标题】:.NET MVC Web API Upload file to local storage and data model to database.NET MVC Web API 上传文件到本地存储和数据模型到数据库
【发布时间】:2019-02-22 04:57:40
【问题描述】:

我想上传一个文件并传递模型。但是当我从邮递员那里尝试时,它总是带来错误。

这是我的代码

public async Task<IHttpActionResult> PostArPumPd([FromBody] tx_arPumPd pum)
    {          
        try
          {
            if (pum == null)
            {
                return Content(HttpStatusCode.BadRequest, "Enter the data correctly");
            }
            else
            {
            tx_arPumPd arpumpds = new tx_arPumPd()
            {
                doc_no = doc,
                doc_date = DateTime.Now,
                descs = pum.descs,
                currency_code = pum.currency_code,
                amount = pum.amount,
                employee_code = pum.employee_code,
                head_code = pum.head_code,
                company_code = pum.company_code,
                created_by = pum.emp_code,
                created_date = DateTime.Now
            };
            db.tx_arPumPd.Add(arpumpds);

            var multiFormDataStreamProvider = new MultiFileUploadProvider(Constants.MEDIA_PATH);                   

            var mod = "PP";
            var newFileName = mod + "_" + doc;

            await Request.Content.ReadAsMultipartAsync(multiFormDataStreamProvider);

            try
            {
                await FileHelper.Upload(multiFormDataStreamProvider, mod, newFileName);
                db.SaveChanges();
                return Content(HttpStatusCode.Created, "Data was save");
            }
            catch (Exception ex)
            {
                return Content(HttpStatusCode.BadRequest, ex);
            }                    
        }
    }
    catch (Exception ex)
    {
        return Content(HttpStatusCode.BadRequest, ex);
    }
}

我在进入这部分时遇到错误 等待 Request.Content.ReadAsMultipartAsync(multiFormDataStreamProvider);

这是错误

ioexception:mime 多部分流意外结束。哑剧多部分 邮件未通过邮递员完成测试

有人知道为什么吗?并帮我上传文件和数据模型? 非常感谢您的帮助

【问题讨论】:

  • 你能分享完整和准确的错误信息吗?请将其添加到您的问题中

标签: asp.net-web-api asp.net-web-api2


【解决方案1】:

好的,我找到了答案。为了保存文件和表单数据,我不解析模型。我只是使用表单数据从邮递员发送数据,值是 Json 数据。所以我从 ReadAsMultipartAsync 读取请求并获取 Json 数据,然后对 json 进行反序列化。之后我们就可以保存数据了。

这就是我从邮递员发送数据的方式 Postmant

这是代码

public async Task<IHttpActionResult> PostArPumPd()
    {          
        try
          {
            var multiFormDataStreamProvider = new MultiFileUploadProvider(Constants.MEDIA_PATH);
            var readToProvider = await Request.Content.ReadAsMultipartAsync(multiFormDataStreamProvider);

            // Get Json Data and Deserialize it
            var json = await readToProvider.Contents[0].ReadAsStringAsync();
            tx_arPumPd a = JsonConvert.DeserializeObject<tx_arPumPd>(json);

            // Set mod and file name for FileHelper classl
            var mod = "PP";
            var newFileName = mod + "_" + doc ;

            tx_arPumPd arpumpds = new tx_arPumPd()
            {
                doc_no = doc,
                doc_date = DateTime.Now,
                descs = a.descs,
                currency_code = a.currency_code,
                amount = a.amount,
                employee_code = a.employee_code,
                head_code = a.head_code,
                company_code = a.company_code,
                created_by = a.emp_code,
                created_date = DateTime.Now
            };
            db.tx_arPumPd.Add(arpumpds);

            var dtl = a.tx_arPumPdDtl;

            foreach (var item in dtl)
            {
                item.doc_no         = doc;
                item.bg_is_ok       = true;
                item.bg_approved    = true;
                item.bg_app_date    = DateTime.Now;
                item.created_by     = a.emp_Code;
                item.created_date   = DateTime.Now;
                db.tx_arPumPdDtl.Add(item);
            }

            try
            {
                await FileHelper.Upload(multiFormDataStreamProvider, mod, newFileName);
                db.SaveChanges();
                return Content(HttpStatusCode.Created, "Data was save");
            }
            catch (Exception ex)
            {
                return Content(HttpStatusCode.BadRequest, ex);
            }                    

        }
        catch (Exception ex)
        {
            return Content(HttpStatusCode.BadRequest, ex);
        }
    }

如果有人有更好的方法来做到这一点,我仍然很高兴了解它。 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2019-08-13
    • 2018-10-04
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多