我正在尝试从 Android 客户端将图像上传到 ASP.NET RESTful Web API。为此,我使用了Android 异步 Http库。
我希望标题看起来像这篇文章中提到的标题。
POST http://localhost:50460/api/values/1 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 29278
-----------------------------41184676334
Content-Disposition: form-data; name="caption"
Summer vacation
-----------------------------41184676334
Content-Disposition: form-data; name="image1"; filename="GrandCanyon.jpg"
Content-Type: image/jpeg
(Binary data not shown)
-----------------------------41184676334--
我的问题是我提出的请求不是多部分请求,所以我总是抛出不受支持的媒体类型异常。
下面是我的 .NET 代码。
public Task<Guid> Upload([)
{
Guid userGuid;
// Check if the request contains multipart/form-data
// or if the extension is valid
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
return null;
}
var provider = new CustomMultipartFormDataStreamProvider(UPLOAD_PATH);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<Guid>(t =>
{
// mode code
foreach (MultipartFileData file in provider.FileData)
{
filename = file.Headers.ContentDisposition.FileName;
// ... more code
}
return guid;
});
return task;
}
我也尝试过这样的事情:Request.Content.IsMimeMultipartContent("form-data")
我使用 jQuery 创建了一个 HTML 客户端,并且能够毫无问题地上传到 REST 服务。这让我相信我的 Android 代码中缺少一些东西。这就是我的 Java 方法的样子:
File file = new File([path to your file]);
MimeTypeMap map = MimeTypeMap.getSingleton();
String ext = FilenameUtils.getExtension(file.getName());
String mime_type = map.getMimeTypeFromExtension(ext);
MultipartEntity form = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, this);
form.addPart("file-data", new FileBody(file, mime_type, "UTF-8"));
AsyncHttpClient client = new AsyncHttpClient();
client.post(context, [your url], form, mime_type, responseHandler) ;
我不确定我错过了什么。我已经坚持了两天了,我尝试了各种不同的选择。Top 只是我根据这篇文章找到的非常基本的版本。
我想知道我是否可以获得一些关于我应该如何解决这个问题的方向和提示。
谢谢!