gpt4 book ai didi

asp.net-mvc - 如何在 AngularJS 中向表单数据添加另一个参数

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:29:21 24 4
gpt4 key购买 nike

我正在像这样从 angularJS 向我的服务器发送一个文件对象 -

var fd = new FormData();
fd.append('file', file);

var deferred = $q.defer();
$http.post(uploadUrl, fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).success(function(data, status, headers, config){
deferred.resolve(data);
})
.error(function(data, status, headers, config){
deferred.reject('some error occurred');
});

这是我的 Asp.Net MVC Controller -

public HttpResponseMessage Post([FromBody]HttpPostedFileBase file)

我想在同一个请求中再发送一个参数(比如 userId)。有可能这样做吗?我应该如何在服务器端接收它。我尝试将 fd.append('userId', userId) 添加到 formdata 对象,但没有成功。请告诉如何实现这一目标。

提前致谢。

Edit1:当我像我提到的那样绑定(bind)时,出现以下错误:

无法将多个参数('file' 和 'userId')绑定(bind)到请求的内容。

Edit2:我也试过像这样创建一个对象 -

public class PostedInfo{
public HttpPostedFileBase file {get;set;}
public string userId {get;set;}
}

并将发布方法更改为 -

public HttpResponseMessage Post([FromBody]PostedInfo fd)

但是,现在抛出了这个错误,这很明显,因为请求是 json -

The request entity's media type 'multipart/form-data' is not supported for this resource.

不确定如何判断 fd.file 是一个 multipart/form-data 实体。

最佳答案

我终于明白了。问题是 HttpPostedFileBase 似乎不能很好地与 webapi 一起工作,因此应该为此使用 MultipartFormDataStreamProvider。下面的代码 -

    [HttpPost]
public async Task<HttpResponseMessage> Post()
{
if (Request.Content.IsMimeMultipartContent())
{
string path = HttpContext.Current.Server.MapPath("~/Resources");
var provider = new MultipartFormDataStreamProvider(path);
await Request.Content.ReadAsMultipartAsync(provider);
// get the additional parameter
var userId = provider.FormData.GetValues("userId").FirstOrDefault();

string filepath = provider.FileData[0].LocalFileName;

return <your_custom_response_here>;
}

这里可以看到,除了上传文件,我还在服务器代码中获取了userId。

好吧,MultipartFormDataStreamProvider 将使用一个神秘的名称 (BodyPart_...) 保存文件。您可以通过构建自己的 CustomMultipartFormDataStreamProvider 来摆脱它。找到了一个很棒的link至于如何在保存时格式化文件名。值得一读。

关于asp.net-mvc - 如何在 AngularJS 中向表单数据添加另一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com