首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将带有附加数据的FormData文件发送到asp.net web调用

如何将带有附加数据的FormData文件发送到asp.net web调用
EN

Stack Overflow用户
提问于 2019-04-16 14:56:59
回答 1查看 1.9K关注 0票数 0

在这个项目中,我有一种输入和文件上传的形式,ajax调用使用FormData对象将其发送到api的特定Url。当我发送数据时,没有文件上传,它可以正常工作(成功)。当我用上传文件发送表单时,它有时会返回不受支持的媒体类型,或者使用object调用web,我尝试了很多在线代码,但它没有工作。谢谢,这是我的代码。

html

代码语言:javascript
复制
   <form id="myForm" enctype="multipart/form-data">
                    <div class="form-group">
                        <label for="inputEmail4">Title</label>
                        <input type="text" class="form-control required" name="Title" id="Title" placeholder="Title">
                        <span id="TitleSpan" class="d-none text-danger">This field is required</span>
                    </div>
                    <div class="form-group">
                        <label for="inputAddress">Description</label>
                        <textarea type="text" class="form-control required" name="Description" id="Description" placeholder="Description..." maxlength="500" rows="5"></textarea>
                        <span id="chars">500</span> characters remaining
                        <span id="DescriptionSpan" class="d-none text-danger">This field is required</span>
                    </div>
                    <div class="form-group">
                        <label for="inputState">Priority</label>
                        <select id="Priority" name="Priority" class="form-control">
                            <option selected>Low</option>
                            <option>Medium</option>
                            <option>High</option>
                        </select>
                    </div>
                    <div class="form-row">
                        <div class="form-group col-md-4">
                            <label for="City">City</label>
                            <select id="City" name="City" class="form-control">
                                <option value="Cairo" selected>Cairo</option>
                                <option value="Giza">Giza</option>
                            </select>
                        </div>
                        <img style="display:none;" src="~/Content/load.gif" id="loadingImg" />
                        <div class="form-group col-md-4">
                            <label for="Region">Region</label>
                            <input type="text" class="form-control required" name="Region" id="Region" placeholder="Region">
                            <span id="RegionSpan" class="d-none text-danger">This field is required</span>
                        </div>
                    </div>
                    <div class="form-group col-md-8">
                        <label for="exampleFormControlFile1">Upload Images</label>
                        <input type="file" class="form-control-file" value="Browse" id="PhotoPath" name="PhotoPath" accept=".png,.jpg,.jpeg" multiple>
                    </div>
                </form>

我的js

代码语言:javascript
复制
$(document).ready(function () {
    $('#btnAdd').on('click', function (e) {
            CreatePostIssuejs();
        }
    });
function CreatePostIssuejs() {
    console.log("Calling");
    console.log("i'm tracking you");
    debugger;
    var files = $("#PhotoPath").get(0).files;
    var formData = new FormData();
    for (var i = 0; i < files.length; i++) {
        formData.append("fileInput", files[i]);
    }
    formData.append('Title', $("#Title").val());
    formData.append('Description', $('#Description').val());
    formData.append('Priority', $('#Priority').val());
    formData.append('City', $('#City').val());
    formData.append('Region', $('#Region').val());
    var fileData = formData;
    $.ajax({
        url: 'api/Poset/CreatePostIssue',
        data: fileData,
        type: "POST",
        cache: false,
        contentType: false, // Not to set any content header
        processData: false, // Not to process data
        traditional: true,
        success: function (result, status, xhr) {
            debugger;
            alert(result);
            $('#myModal').modal('hide');
            $('#modalsuc').modal('show');
        },
        error: function (xhr, status, error) {
            debugger;
            alert(status);
            $('#modalwar').modal('show');
        }
    });
}
代码语言:javascript
复制
 [Route("api/Poset/CreatePostIssue")]
        [HttpPost]
        public IHttpActionResult CreatePostIssue([FromBody]PostIssueDTO postissueDTO)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    string fname = null;
                    var userid = User.Identity.GetUserId();
                    var httpRequest = HttpContext.Current.Request;
                    if (httpRequest.Files.Count > 0)
                    {
                        var docfiles = new List<string>();
                        foreach (string file in httpRequest.Files)
                        {
                            var postedFile = httpRequest.Files[file];
                            fname = userid + postedFile.FileName;
                            var filePath = HttpContext.Current.Server.MapPath("~/Images/" + fname);
                            postedFile.SaveAs(filePath);
                            docfiles.Add(filePath);
                        }
                    }
                    else
                    { }
                    Post post = new Post();
                    post.PostType = "PostIssue";
                    post.AddedTime = DateTime.Now;
                    post.Title = postissueDTO.Title;
                    post.Description = postissueDTO.Description;
                    post.Priority = postissueDTO.Priority;
                    post.City = postissueDTO.City;
                    post.Region = postissueDTO.Region;
                    post.PhotoUrl = fname;
                    post.UserId = User.Identity.GetUserId();
                    _db.Posts.Add(post);
                    _db.SaveChanges();
                    return Json("success");
                }
                catch (Exception ex)
                {
                   return Json("somethimg went wrong" + ex);
                }

            }
            else
            {
               return Json("Model State wrong"); 
            }

        }

dto模型

代码语言:javascript
复制
 public class PostIssueDTO
    {
        public int Id { get; set; }
        public string PostType { get; set; }
        public DateTime AddedTime { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string Priority { get; set; }
        public string City { get; set; }
        public string Region { get; set; }
        public HttpPostedFileBase PhotoPath { get; set; }
        public DateTime? UpdatedOn { get; set; }
        public bool IsPinned { get; set; }
        public bool IsDelected { get; set; }
}

我希望这能像我在网上看到的那样起作用。

EN

回答 1

Stack Overflow用户

发布于 2019-04-16 15:13:22

请将您的js功能重新设置如下:

代码语言:javascript
复制
function CreatePostIssuejs() {
    console.log("Calling");
    console.log("i'm tracking you");
    debugger;

    var formData = new FormData();

    var file = document.getElementById("PhotoPath").files[0];
    formData.append("PhotoPath", file);
    formData.append('Title', $("#Title").val());
    formData.append('Description', $('#Description').val());
    formData.append('Priority', $('#Priority').val());
    formData.append('City', $('#City').val());
    formData.append('Region', $('#Region').val());
    var fileData = formData;
    $.ajax({
        url: 'api/Poset/CreatePostIssue',
        data: fileData,
        type: "POST",
        cache: false,
        contentType: false, // Not to set any content header
        processData: false, // Not to process data
        traditional: true,
        success: function (result, status, xhr) {
            debugger;
            alert(result);
            $('#myModal').modal('hide');
            $('#modalsuc').modal('show');
        },
        error: function (xhr, status, error) {
            debugger;
            alert(status);
            $('#modalwar').modal('show');
        }
    });
}

更新

请把这个也换一下

代码语言:javascript
复制
 public IHttpActionResult CreatePostIssue(PostIssueDTO postissueDTO)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55711144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档