[英]WP8 Upload file
我正在尝试通过C#Windows Phone 8.1应用程序上的网站API上传文件。 我想使用Windows.Web.Http lib。 我可以选择一个带有FilePicker的文件(fileChoosenFromFilePicker var)。
错误我每次都收到http 400(错误请求)错误。
问题有人可以帮助我吗? 如何查看我的代码生成的POST请求? 我可以在服务器端捕获数据包,但我想在客户端看到。
码
在API文档中,有一个示例:
curl -H "Authorization: Token f2210dacd9c6ccb8133606d94ff8e61d99b477fd" -F file=@test.txt -F filename=test.txt -F parent_dir=/ http://cloud.seafile.com:8082/upload-api/ef881b22
这是我的代码:
var HttpClientUpload = new HttpClient();
HttpMultipartContent requestUpload = new HttpMultipartContent();
HttpMultipartFormDataContent requestUploadContent = new HttpMultipartFormDataContent();
var fileContent = await fileChoosenFromFilePicker.OpenReadAsync();
HttpFormUrlEncodedContent requestUploadData = new HttpFormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("filename", fileChoosenFromFilePicker.Name),
new KeyValuePair<string, string>("parent_dir", "/")
});
HttpClientUpload.DefaultRequestHeaders.Add("Authorization", "token " + authorization);
IInputStream inputStream = await fileChoosenFromFilePicker.OpenAsync(FileAccessMode.Read);
requestUploadContent.Add(new HttpStreamContent(inputStream), "myFile", fi.Name);
try
{
HttpResponseMessage response = await HttpClientUpload.PostAsync(uristringForUpload, requestUpload);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
{
}
编辑 :
我使用了您的代码。 并进行了一些更改:
var HttpClientUpload = new HttpClient(filter);
HttpMultipartFormDataContent requestUploadContent = new HttpMultipartFormDataContent();
var fileContent = await fileChoosenFromFilePicker.OpenReadAsync();
HttpClientUpload.DefaultRequestHeaders.Add("Authorization", "token " + authorization);
FileInfo fi = new FileInfo(fileChoosenFromFilePicker.Path);
string fileName = fi.Name;
var inputStream = await fileChoosenFromFilePicker.OpenAsync(FileAccessMode.Read);
requestUploadContent.Add(new HttpStreamContent(inputStream), "myFile", fi.Name);
var values = new[]
{
new KeyValuePair<string, string>("filename", fileName),
new KeyValuePair<string, string>("parent_dir", "/")
};
foreach (var keyValuePair in values)
{
requestUploadContent.Add(new HttpStringContent(keyValuePair.Value), keyValuePair.Key);
}
try
{
HttpResponseMessage responseLogin = await HttpClientUpload.PostAsync(uristringForUpload, requestUploadContent);
responseLogin.EnsureSuccessStatusCode();
}
catch (Exception ex)
{
}
现在好了。 但是,它仍然无法正常工作。
在这里您可以找到POST结果: http ://requestb.in/p5jvlfp5?inspect#13hh5o
如果我用卷发制成,则会得到以下结果: http : //requestb.in/pwng8npw?inspect
在我的版本中,POST结果中没有“ Content-Type:应用程序/八位位组流”。 我该如何指定呢? 或者可能是HttpStreamContent问题?
据我所知,您不是将所有这些信息组合在一起。 到实际的PostAsync()调用时,您将沿着HttpMultipartContent类型的完全空的包进行发送。 您确定变量requestUpload的尺寸,然后除了发布变量外,什么也不做。
尝试通过创建外部HttpMultipartFormDataContent对象来组成请求,您将在其中添加HttpStreamContent和HttpFormUrlEncodedContent对象,如下所示。 我已经尝试过最好的重新创建,以便确定Seafile的python上传方法文档中的请求所要求的服务器。
var client = new HttpClient();
var request = new HttpMultipartFormDataContent();
request.Headers.Add("Authorization", "Token " + authorization);
// Add file content request part
var fileContent = await fileChosenFromFilePicker.OpenAsync(FileAccessMode.Read);
var requestContent = new HttpStreamContent(fileContent);
requestContent.Headers.Add("Content-Type", "application/octet-stream");
request.Add(requestContent, "file", fileChosenFromFilePicker.Name);
// Add form data request part
request.Add(new HttpFormUrlEncodedContent(new Dictionary<string, string>
{
{"parent_dir", "/"}
}));
try
{
// Submit multipart request object
var response = await client.PostAsync(new Uri(uriStringForUpload), request);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
{
// TODO
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.