- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在像这样从 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/
我的 WordPress 数据库中有一个名为“post_votes”的自定义表,用于投票帖子。 每当我发布新帖子时,我是否可以同时向该表添加一些数据? 我试图在不编辑任何 wp 核心文件的情况下实现这
我对 Rails 非常陌生,完全被难住了。我真的也需要这个工作,因为它是另一个更大的主要是 Javascript 项目的一部分,而 Rails 部分刚刚被甩给了我。我必须向 page_events 表
我是一名优秀的程序员,十分优秀!