Отправка запроса на многочастную загрузку C # на диск Google - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь создать многочастный запрос на загрузку из C # для загрузки небольшого файла в Google Drive согласно https://developers.google.com/drive/v3/web/multipart-upload

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token);

            //api endpoint
            var apiUri = new Uri("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart");

            // read the image content 
            var imageBinaryContent = new ByteArrayContent(fileBytes);
            imageBinaryContent.Headers.Add("Content-Type", "image/jpeg");

            // prepare the metadata content
            string metaContent = "{\"name\":\"myObject\"}";
            byte[] byteArray = Encoding.UTF8.GetBytes(metaContent);
            var metaStream = new ByteArrayContent(byteArray);
            metaStream.Headers.Add("Content-Type", "application/json; charset=UTF-8");

            // create the multipartformdata content, set the headers, and add the above content
            var multipartContent = new MultipartFormDataContent();
            multipartContent.Headers.Remove("Content-Type");
            multipartContent.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundry=myboundry---");
            multipartContent.Add(metaStream);
            multipartContent.Add(imageBinaryContent);


            HttpResponseMessage result = await client.PostAsync(apiUri, multipartContent);

        }

Но я не могу заставить его работать. Этот код отлично работает для простых загрузок на диск:

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token);

            //api endpoint
            var apiUri = new Uri("https://www.googleapis.com/upload/drive/v3/files?uploadType=media");


            // read the image content 
            var imageBinaryContent = new ByteArrayContent(fileBytes);
            imageBinaryContent.Headers.Add("Content-Type", "image/jpeg");


            HttpResponseMessage result = await client.PostAsync(apiUri, imageBinaryContent);

        }

1 Ответ

0 голосов
/ 06 мая 2018

Две вещи выпрыгивают:

  1. Вы ошиблись словом boundary в boundry=myboundry.
  2. Также убедитесь, что Content-Type равно multipart/related.
...