[英]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.