private void AddCommonModelFields(MultipartFormDataContent form, UploadModelRequest request) { form.Add(new StringContent(ShortenString(request.Name, 48)), "name"); form.Add(new StringContent(ShortenString(request.Description, 1024)), "description"); form.Add(new StringContent(request.IsPrivate.To_0_1()), "private"); form.Add(new StringContent(request.IsInspectable.To_0_1()), "isInspectable"); form.Add(new StringContent(request.IsPublished.To_0_1()), "isPublished"); form.Add(new StringContent(request.License), "license"); var optionsJson = JsonConvert.SerializeObject(request.Options); form.Add(new StringContent(JsonConvert.SerializeObject(request.Options)), "options"); form.AddRange(request.Tags, "tags"); form.AddRange(request.Categories, "categories"); }
public async Task <SketchfabUploadResponse> UploadModelAsync(UploadModelRequest request, string sketchFabToken) { SketchfabUploadResponse sfResponse = new SketchfabUploadResponse(); try { _logger.LogInformation($"Uploading model [{request.FilePath}]."); if (string.IsNullOrWhiteSpace(request.FilePath)) { throw new ArgumentNullException(nameof(request.FilePath)); } if (!File.Exists(request.FilePath)) { throw new FileNotFoundException($"File [{request.FilePath}] not found."); } HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, $"{SketchfabApiUrl}/models"); httpRequestMessage.AddAuthorizationHeader(sketchFabToken, request.TokenType); using var form = new MultipartFormDataContent(); using var fileContent = new ByteArrayContent(await File.ReadAllBytesAsync(request.FilePath)); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); form.Add(fileContent, "modelFile", Path.GetFileName(request.FilePath)); if (!string.IsNullOrWhiteSpace(request.Source)) { form.Add(new StringContent(request.Source), "source"); } else { _logger.LogWarning("Sketchfab upload has no source configured. It's better to set one to uniquely identify all the models generated by the exporter, see https://Sketchfab.com/developers/guidelines#source"); } AddCommonModelFields(form, request); httpRequestMessage.Content = form; var httpClient = _httpClientFactory.CreateClient(); var response = await httpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead); _logger.LogInformation($"{nameof(UploadModelAsync)} responded {response.StatusCode}"); if (response.IsSuccessStatusCode) { var uuid = response.Headers.GetValues("Location").FirstOrDefault(); sfResponse.ModelId = uuid; sfResponse.StatusCode = response.StatusCode; sfResponse.Message = response.ReasonPhrase; request.ModelId = uuid; _logger.LogInformation("Uploading is complete. Model uuid is " + uuid); } else { _logger.LogError($"Error in Sketchfab upload: {response.StatusCode} {response.ReasonPhrase}"); sfResponse.StatusCode = response.StatusCode; sfResponse.Message = response.ReasonPhrase; } return(sfResponse); } catch (Exception ex) { _logger.LogError($"Sketchfab upload error: {ex.Message}"); throw; } }
private string GetAuthPrefix(UploadModelRequest request) { return(request.TokenType.ToString()); }