【问题标题】:Upload file to Pushbullet in Windows 10 app c#在 Windows 10 应用程序 c# 中将文件上传到 Pushbullet
【发布时间】:2016-07-22 17:01:09
【问题描述】:

我目前正在使用 Pushbullet API,需要上传文件。

我可以使用这个方法成功获取docs中指定的上传url:

public static async Task<Uploads> GetUploadUrl(string file_name, string file_type)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Access-Token", AccessToken);

            var json = new JObject
            {
                ["file_name"] = file_name,
                ["file_type"] = file_type
            };

            var result = await client.PostAsync(new Uri(_uploadUrl, UriKind.RelativeOrAbsolute), new HttpStringContent(json.ToString(), UnicodeEncoding.Utf8, "application/json"));
            if (result.IsSuccessStatusCode)
            {
                var textresult = await result.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<Uploads>(textresult);
            }
        }

        return null;
    }

问题是当我尝试上传文件时。我目前正在使用这种方法:

 public static async Task<bool> UploadFile(StorageFile file, string upload_url)
    {
        try
        {
            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            var content = new MultipartFormDataContent();
            if (file != null)
            {
                var streamData = await file.OpenReadAsync();
                var bytes = new byte[streamData.Size];
                using (var dataReader = new DataReader(streamData))
                {
                    await dataReader.LoadAsync((uint)streamData.Size);
                    dataReader.ReadBytes(bytes);
                }
                var streamContent = new ByteArrayContent(bytes);
                content.Add(streamContent);
            }
            client.DefaultRequestHeaders.Add("Access-Token", AccessToken);
            var response = await client.PostAsync(new Uri(upload_url, UriKind.Absolute), content);
            if (response.IsSuccessStatusCode)
                return true;
        }
        catch { return false; }

        return false;
    }

但我收到 Http 400 错误。在 UWP 应用中使用 multipart/form-data 上传文件的正确方法是什么?

【问题讨论】:

    标签: c# uwp windows-10-universal pushbullet


    【解决方案1】:

    HTTP 400 error表示Bad Request,表示由于语法错误,服务器无法理解该请求。换句话说,客户端发送的请求不遵循服务器的规则。

    我们看一下document,我们可以在示例请求中找到它使用以下参数:

    -F 文件=@cat.jpg

    所以在请求中,我们需要为上传的文件设置名称,名称应该是“文件”。此外,在这个请求中,不需要使用访问令牌。所以你可以改变你的代码如下:

    public static async Task<bool> UploadFile(StorageFile file, string upload_url)
    {
        try
        {
            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            var content = new MultipartFormDataContent();
            if (file != null)
            {
                var streamData = await file.OpenReadAsync();
                var bytes = new byte[streamData.Size];
                using (var dataReader = new DataReader(streamData))
                {
                    await dataReader.LoadAsync((uint)streamData.Size);
                    dataReader.ReadBytes(bytes);
                }
                var streamContent = new ByteArrayContent(bytes);
                content.Add(streamContent, "file");
            }
            //client.DefaultRequestHeaders.Add("Access-Token", AccessToken);
            var response = await client.PostAsync(new Uri(upload_url, UriKind.Absolute), content);
            if (response.IsSuccessStatusCode)
                return true;
        }
        catch { return false; }
    
        return false;
    }
    

    那么您的代码应该能够工作。您将收到 204 No Content 响应,UploadFile 方法将返回 true

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2014-07-23
      • 1970-01-01
      相关资源
      最近更新 更多