public async Task Upload_Empty_Photo(KnownChains apiName) { var request = new UploadMediaModel(Users[apiName], new MemoryStream(), ".jpg"); var response = await Api[apiName].UploadMedia(request, CancellationToken.None); Assert.IsTrue(response.Error.Message.StartsWith("The submitted file is empty.")); }
public async Task <OperationResult <MediaModel> > UploadMedia(UploadMediaModel model, CancellationToken ct) { if (!EnableRead) { return(null); } var results = Validate(model); if (results.Any()) { return(new OperationResult <MediaModel>(new ValidationError(results))); } var trxResp = await _ditchClient.GetVerifyTransaction(model, ct); if (!trxResp.IsSuccess) { return(new OperationResult <MediaModel>(trxResp.Error)); } model.VerifyTransaction = JsonConverter.Serialize(trxResp.Result); var endpoint = $"{BaseUrl}/{GatewayVersion.V1P1}/media/upload"; return(await Gateway.UploadMedia(endpoint, model, ct)); }
public async Task <OperationResult <MediaModel> > UploadMedia(string url, UploadMediaModel model, CancellationToken token) { var fTitle = Guid.NewGuid().ToString(); var file = new StreamContent(model.File); file.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType); var multiContent = new MultipartFormDataContent { { new StringContent(model.VerifyTransaction), "trx" }, { file, "file", fTitle }, { new StringContent(model.GenerateThumbnail.ToString()), "generate_thumbnail" } }; var response = await _client.PostAsync(url, multiContent, token); var result = await CreateResult <MediaModel>(response, token); if (result.IsSuccess && result.Result == null) { result.Error = new AppError(LocalizationKeys.ServeUnexpectedError); } return(result); }
private async Task <OperationResult <MediaModel> > UploadPhoto(string path) { System.IO.Stream stream = null; FileInputStream fileInputStream = null; try { var photo = new Java.IO.File(path); fileInputStream = new FileInputStream(photo); stream = new StreamConverter(fileInputStream, null); var request = new UploadMediaModel(AppSettings.User.UserInfo, stream, System.IO.Path.GetExtension(path)); var serverResult = await Presenter.TryUploadMedia(request); return(serverResult); } catch (Exception ex) { AppSettings.Reporter.SendCrash(ex); return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError))); } finally { fileInputStream?.Close(); // ??? change order? stream?.Flush(); fileInputStream?.Dispose(); stream?.Dispose(); } }
public async Task <OperationResult <MediaModel> > UploadMedia(UploadMediaModel model, CancellationToken ct) { if (!EnableRead) { return(null); } var results = Validate(model); if (results.Any()) { return(new OperationResult <MediaModel>(new ValidationError(results))); } var trxResp = await _ditchClient.GetVerifyTransaction(model, ct); if (!trxResp.IsSuccess) { return(new OperationResult <MediaModel>(trxResp.Error)); } model.VerifyTransaction = trxResp.Result; return(await Gateway.UploadMedia(GatewayVersion.V1P1, "media/upload", model, ct)); }
private async Task <OperationResult <MediaModel> > UploadPhoto() { Stream stream = null; try { var compression = 1f; var maxCompression = 0.1f; int maxFileSize = _photoSize * 1024; var byteArray = ImageAsset.AsJPEG(compression); while (byteArray.Count() > maxFileSize && compression > maxCompression) { compression -= 0.1f; byteArray = ImageAsset.AsJPEG(compression); } stream = byteArray.AsStream(); var request = new UploadMediaModel(BasePresenter.User.UserInfo, stream, ImageExtension); return(await _presenter.TryUploadMedia(request)); } catch (Exception ex) { AppSettings.Reporter.SendCrash(ex); return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError))); } finally { stream?.Flush(); stream?.Dispose(); } }
public async Task <OperationResult <MediaModel> > GetLastPost(HttpManager client, DebugAsset debugAsset, CancellationToken token) { //https://www.instagram.com/developer/authentication/ < how to get access_token (OAuth skiped. hardcoded key used instead... time time..)v var fullUrl = GetRecentMediaUrl + debugAsset.InsagramAccessToken; if (!string.IsNullOrEmpty(debugAsset.LastLoadedMediaId)) { fullUrl += "&MIN_ID=" + debugAsset.LastLoadedMediaId; } var responce = await client.GetRequest <InstagramResult>(fullUrl, token); if (responce.IsError) { throw new NotImplementedException(responce.Error.Msg); } var media = responce.Result.data.FirstOrDefault(); if (debugAsset.LastLoadedMediaId != null && debugAsset.LastLoadedMediaId.Equals(media.id)) { return(null); } debugAsset.LastLoadedMediaId = media.id; //save image to IPFS var model = new UploadMediaModel { VerifyTransaction = debugAsset.AuthorizationTransactionJson, Url = media.images.standard_resolution.url }; return(await client.UploadMedia("https://steepshot.org/api/v1_1/media/upload", model, token)); }
private async Task <OperationResult <UUIDModel> > UploadMedia(GalleryMediaModel model) { model.UploadState = UploadState.UploadStart; System.IO.Stream stream = null; FileInputStream fileInputStream = null; try { var photo = new Java.IO.File(model.TempPath); fileInputStream = new FileInputStream(photo); stream = new StreamConverter(fileInputStream, null); var request = new UploadMediaModel(AppSettings.User.UserInfo, stream, System.IO.Path.GetExtension(model.TempPath)); var serverResult = await Presenter.TryUploadMedia(request); model.UploadState = UploadState.UploadEnd; return(serverResult); } catch (Exception ex) { model.UploadState = UploadState.UploadError; await AppSettings.Logger.Error(ex); return(new OperationResult <UUIDModel>(new InternalException(LocalizationKeys.PhotoUploadError, ex))); } finally { fileInputStream?.Close(); // ??? change order? stream?.Flush(); fileInputStream?.Dispose(); stream?.Dispose(); } }
public async Task <OperationResult <MediaModel> > UploadMedia(string url, UploadMediaModel model, CancellationToken token) { var fTitle = Guid.NewGuid().ToString(); MemoryStream stream; using (WebClient client = new WebClient()) { var bytes = client.DownloadData(new Uri(model.Url)); stream = new MemoryStream(bytes); } var file = new StreamContent(stream); file.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType); var multiContent = new MultipartFormDataContent { { new StringContent(model.VerifyTransaction), "trx" }, { file, "file", fTitle }, { new StringContent(model.GenerateThumbnail.ToString()), "generate_thumbnail" } }; var response = await _client.PostAsync(url, multiContent, token); var result = await CreateResult <MediaModel>(response, token); if (result.IsError && result.Result == null) { result.Error = new ErrorBase("Can`t upload image!"); } return(result); }
public override async Task <OperationResult <string> > GetVerifyTransaction(UploadMediaModel model, CancellationToken ct) { if (!TryReconnectChain(ct)) { return(new OperationResult <string>(new ApplicationError(Localization.Errors.EnableConnectToBlockchain))); } var keys = ToKeyArr(model.PostingKey); if (keys == null) { return(new OperationResult <string>(new ApplicationError(Localization.Errors.WrongPrivatePostingKey))); } return(await Task.Run(() => { var op = new FollowOperation(model.Login, "steepshot", DitchFollowType.Blog, model.Login); var properties = new DynamicGlobalPropertyObject { HeadBlockId = Hex.ToString(_operationManager.ChainId), Time = DateTime.Now, HeadBlockNumber = 0 }; var tr = _operationManager.CreateTransaction(properties, keys, ct, op); return new OperationResult <string>() { Result = JsonConverter.Serialize(tr) }; }, ct)); }
public async Task <OperationResult <UUIDModel> > UploadMedia(string url, UploadMediaModel model, CancellationToken token) { var fTitle = Guid.NewGuid().ToString(); var file = new StreamContent(model.File); file.Headers.ContentType = MediaTypeHeaderValue.Parse(model.ContentType); var multiContent = new MultipartFormDataContent { { file, "file", fTitle }, { new StringContent(model.Thumbnails.ToString()), "thumbnails" }, { new StringContent(model.AWS.ToString()), "aws" }, { new StringContent(model.IPFS.ToString()), "ipfs" } }; var response = await PostAsync(url, multiContent, token); var result = await CreateResult <UUIDModel>(response, token); if (result.IsSuccess && result.Result == null) { result.Exception = new ValidationException(LocalizationKeys.ServeUnexpectedError); } return(result); }
public async Task UploadMediaTest(KnownChains apiName) { var user = Users[apiName]; // 1) Create new post var path = GetTestImagePath(); var stream = new FileStream(GetTestImagePath(), FileMode.Open); var uploadImageModel = new UploadMediaModel(user, stream, Path.GetExtension(path)); var servResp = await Api[apiName].UploadMedia(uploadImageModel, CancellationToken.None); AssertResult(servResp); }
private async Task <OperationResult <MediaModel> > UploadPhoto(UIImage photo, NSDictionary metadata) { Stream stream = null; try { var compression = 1f; var maxCompression = 0.1f; int maxFileSize = _photoSize * 1024; var byteArray = photo.AsJPEG(compression); while (byteArray.Count() > maxFileSize && compression > maxCompression) { compression -= 0.1f; byteArray = photo.AsJPEG(compression); } if (metadata != null) { //exif setup var editedExifData = RemakeMetadata(metadata, photo); var newImageDataWithExif = new NSMutableData(); var imageDestination = CGImageDestination.Create(newImageDataWithExif, "public.jpeg", 0); imageDestination.AddImage(new UIImage(byteArray).CGImage, editedExifData); imageDestination.Close(); stream = newImageDataWithExif.AsStream(); } else { stream = byteArray.AsStream(); } var request = new UploadMediaModel(AppSettings.User.UserInfo, stream, ImageExtension); return(await _presenter.TryUploadMedia(request)); } catch (Exception ex) { AppSettings.Reporter.SendCrash(ex); return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError))); } finally { stream?.Flush(); stream?.Dispose(); } }
public async Task <OperationResult <UUIDModel> > UploadMedia(UploadMediaModel model, CancellationToken ct) { if (!EnableRead) { return(null); } var results = Validate(model); if (results != null) { return(new OperationResult <UUIDModel>(results)); } var endpoint = $"https://media.steepshot.org/api/v1/upload"; return(await HttpClient.UploadMedia(endpoint, model, ct)); }
private async Task <OperationResult <MediaModel> > UploadPhoto() { Stream stream = null; try { stream = ImageAsset.AsJpegStream(); var request = new UploadMediaModel(BasePresenter.User.UserInfo, stream, ImageExtension); return(await _presenter.TryUploadMedia(request)); } catch (Exception ex) { AppSettings.Reporter.SendCrash(ex); return(new OperationResult <MediaModel>(new ApplicationError(Localization.Errors.PhotoProcessingError))); } finally { stream?.Flush(); stream?.Dispose(); } }
private async Task <OperationResult <MediaModel> > UploadPhoto(Stream photoStream) { try { photoStream.Position = 0; var request = new UploadMediaModel(BasePresenter.User.UserInfo, photoStream, Path.GetExtension(".jpg")); var serverResult = await Presenter.TryUploadMedia(request); return(serverResult); } catch (Exception ex) { AppSettings.Reporter.SendCrash(ex); return(new OperationResult <MediaModel>(new AppError(LocalizationKeys.PhotoProcessingError))); } finally { photoStream?.Close(); photoStream?.Dispose(); } }
private void UploadTest(StringBuilder sb, int num) { sb.Append($"{num}) UploadTest : "); StepFinished?.Invoke(sb.ToString()); var cat = "/9j/4AAQSkZJRgABAQEAwADAAAD/4QBqRXhpZgAATU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAAQAAAAModpAAQAAAABAAAAQgAAAABTaG90d2VsbCAwLjIyLjAAAAKgAgAJAAAAAQAAAMKgAwAJAAAAAQAAAMIAAAAAAAD/4Qn0aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPg0KCTxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+DQoJCTxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjE5NCIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjE5NCIgdGlmZjpJbWFnZVdpZHRoPSIxOTQiIHRpZmY6SW1hZ2VIZWlnaHQ9IjE5NCIvPg0KCTwvcmRmOlJERj4NCjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAIBAQIBAQICAgICAgICAwUD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"; byte[] byteArray = Encoding.ASCII.GetBytes(cat); MemoryStream stream = new MemoryStream(byteArray); var request = new UploadMediaModel(_user, stream, ".jpg") { GenerateThumbnail = false, }; var mediaResponse = _api.UploadMedia(request, CancellationToken.None).Result; if (!mediaResponse.IsSuccess) { sb.AppendLine($"fail. Reason:{Environment.NewLine} {mediaResponse.Error.Message}"); return; } var model = new PreparePostModel(_user, AppSettings.AppInfo.GetModel()) { Tags = new[] { "spam" }, Title = "Upload test", Media = new[] { mediaResponse.Result }, }; var response = _api.CreateOrEditPost(model, CancellationToken.None).Result; if (!response.IsSuccess) { sb.AppendLine($"fail. Reason:{Environment.NewLine} {response.Error.Message}"); return; } sb.AppendLine("pass."); }
public abstract Task <OperationResult <string> > GetVerifyTransaction(UploadMediaModel model, CancellationToken ct);
private async Task <OperationResult <MediaModel> > UploadPhoto(UIImage photo, NSDictionary metadata) { Stream stream = null; try { var compression = 1f; var maxCompression = 0.1f; int maxFileSize = _photoSize * 1024; var byteArray = photo.AsJPEG(compression); while (byteArray.Count() > maxFileSize && compression > maxCompression) { compression -= 0.1f; byteArray = photo.AsJPEG(compression); } if (metadata != null) { //exif setup var editedExifData = RemakeMetadata(metadata, photo); var newImageDataWithExif = new NSMutableData(); var imageDestination = CGImageDestination.Create(newImageDataWithExif, "public.jpeg", 0); imageDestination.AddImage(new UIImage(byteArray).CGImage, editedExifData); imageDestination.Close(); stream = newImageDataWithExif.AsStream(); } else { stream = byteArray.AsStream(); } var request = new UploadMediaModel(AppSettings.User.UserInfo, stream, ImageExtension); var serverResult = await _presenter.TryUploadMedia(request); if (!serverResult.IsSuccess) { return(new OperationResult <MediaModel>(serverResult.Exception)); } var uuidModel = serverResult.Result; var done = false; do { var state = await _presenter.TryGetMediaStatus(uuidModel); if (state.IsSuccess) { switch (state.Result.Code) { case UploadMediaCode.Done: done = true; break; case UploadMediaCode.FailedToProcess: case UploadMediaCode.FailedToUpload: case UploadMediaCode.FailedToSave: return(new OperationResult <MediaModel>(new Exception(state.Result.Message))); default: await Task.Delay(3000); break; } } } while (!done); return(await _presenter.TryGetMediaResult(uuidModel)); } catch (Exception ex) { return(new OperationResult <MediaModel>(new InternalException(LocalizationKeys.PhotoProcessingError, ex))); } finally { stream?.Flush(); stream?.Dispose(); } }
private async Task <OperationResult <MediaModel> > UploadMedia(UploadMediaModel model, CancellationToken ct) { return(await Api.UploadMedia(model, ct)); }
private async Task <OperationResult <MediaModel> > UploadPhoto(string url, CancellationToken token) { MemoryStream stream = null; WebClient client = null; try { client = new WebClient(); var bytes = client.DownloadData(new Uri(url)); stream = new MemoryStream(bytes); var request = new UploadMediaModel(User.UserInfo, stream, Path.GetExtension(MimeTypeHelper.Jpg)); var serverResult = await Client.UploadMedia(request, token); if (!serverResult.IsSuccess) { return(new OperationResult <MediaModel>(serverResult.Exception)); } var uuidModel = serverResult.Result; var done = false; do { if (token.IsCancellationRequested) { return(new OperationResult <MediaModel>(new OperationCanceledException())); } var state = await Client.GetMediaStatus(uuidModel, token); if (state.IsSuccess) { switch (state.Result.Code) { case UploadMediaCode.Done: done = true; break; case UploadMediaCode.FailedToProcess: case UploadMediaCode.FailedToUpload: case UploadMediaCode.FailedToSave: return(new OperationResult <MediaModel>(new Exception(state.Result.Message))); default: await Task.Delay(5000); break; } } } while (!done); return(await Client.GetMediaResult(uuidModel, token)); } catch (Exception ex) { return(new OperationResult <MediaModel>(new InternalException(LocalizationKeys.PhotoUploadError, ex))); } finally { stream?.Flush(); client?.Dispose(); stream?.Dispose(); } }
public async Task <OperationResult <MediaModel> > TryUploadMedia(UploadMediaModel model) { return(await TryRunTask <UploadMediaModel, MediaModel>(UploadMedia, OnDisposeCts.Token, model)); }