簡體   English   中英

WP8上傳文件

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM