public bool ShareFileWithRoom(string roomName, string fileFullPath, string message = null) { using (JsonSerializerConfigScope()) { var request = new ShareFileWithRoomRequest { File = fileFullPath, Message = message }; var result = false; try { var statusCode = HipchatEndpoints.ShareFileWithRoomEndpointFormat .Fmt(roomName) .AddHipchatAuthentication(_authToken) .PostHttpContentToUrl(request.EncodeMultipartRelatedHipchatRequest()); if (statusCode.HasValue && statusCode.Value == HttpStatusCode.NoContent) { result = true; } } catch (Exception exception) { if (exception is WebException) { throw ExceptionHelpers.WebExceptionHelper(exception as WebException, "share_file_with_room"); } throw ExceptionHelpers.GeneralExceptionHelper(exception, "ShareFileWithRoom"); } return(result); } }
public static HttpContent EncodeMultipartRelatedHipchatRequest(this ShareFileWithRoomRequest request) { var fi = new FileInfo(request.File); var fileName = fi.Name; byte[] fileContents = File.ReadAllBytes(fi.FullName); var multiPartContent = new MultipartContent("related"); if (!string.IsNullOrEmpty(request.Message)) { var stringContent = new StringContent("{" + "message".EncodeJson() + ": " + request.Message.EncodeJson() + "}", Encoding.UTF8, "application/json"); stringContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { Name = "metadata", }; multiPartContent.Add(stringContent); } var byteArrayContent = new ByteArrayContent(fileContents); byteArrayContent.Headers.Add("Content-Type", "application/octet-stream"); byteArrayContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { Name = "file", FileName = Path.GetFileName(fileName) }; multiPartContent.Add(byteArrayContent); return(multiPartContent); }