// Start is called before the first frame update void Start() { var storage = FirebaseStorage.DefaultInstance; // 테스트할 때마다 경로 바꿔서 테스트 가능 var screenshotReference = storage.GetReferenceFromUrl(PATH).Child($"/screenshots/city-4298285_640.jpg"); #region Set-Metadata var metadataChange = new MetadataChange() { CustomMetadata = new Dictionary <string, string>() { //{ "Position", Camera.main.transform.position.ToString()}, { "Location", "카페" } } }; #endregion screenshotReference.UpdateMetadataAsync(metadataChange).ContinueWith(task => { if (!task.IsFaulted && !task.IsCanceled) { // access the updated meta data Firebase.Storage.StorageMetadata meta = task.Result; } }); }
public static void UploadFile(string File, string Path, string Type, string Database) { StorageReference FileReference = StorageReference.Child(Path); var Metadata = new MetadataChange(); Metadata.ContentType = "image/" + Type.Replace(".", ""); FileReference.PutFileAsync(File, Metadata).ContinueWith((Task) => { if (Task.IsFaulted || Task.IsCanceled) { Debug.Log(Task.Exception.ToString()); TecWolf.System.SystemInterface.Alert("Foto não enviada com sucesso, tente novamente."); } else { TecWolf.System.SystemInterface.Alert("Foto enviada com sucesso."); FileReference.GetDownloadUrlAsync().ContinueWith(TaskDownload => { if (TaskDownload.IsCompleted) { Debug.Log("Download URL: " + TaskDownload.Result); DownloadUrl = TaskDownload.Result.ToString(); FirebaseController.WriteDataString(Database, "link", FirebaseController.DownloadUrl); } }); } }); }
/// <summary> /// Sets value at Voxel containing point. /// If updateStruct, re-grids contained space so no voxel contains two points. /// If not, replaces value in vox. /// If Container does not contain newPoint, throws ArgumentOutOfRangeException. /// Returns MetadataChange object specifying changes made. /// <summary> public MetadataChange set(Vector3 point, T value, bool updateStruct) { if (!contains(point)) { throw new ArgumentOutOfRangeException("point", "not contained in Container."); } int childNum = whichChild(point); if (children[childNum].GetType() == typeof(OctreeContainer <T>)) { return(((OctreeContainer <T>)children[childNum]).set(point, value, updateStruct)); } else { if (!updateStruct || ((Voxel <T>)children[childNum]).nullVox == true || children[childNum].size() < 2f * minSize) { /// reassign voxel data return(((Voxel <T>)children[childNum]).set(point, value)); } else { /// split, try set again MetadataChange change1; children[childNum] = ((Voxel <T>)children[childNum]).split(out change1); MetadataChange change2 = ((OctreeContainer <T>)children[childNum]).set(point, value, updateStruct); return(change1 + change2); } } }
/// <summary> /// upload the Live2D model to server /// </summary> /// <param name="filepath">Current live2D model.json file</param> public async Task UploadLive2D(string filepath) { var fileType = new MetadataChange(); //setup compressor ModelCompressor comp = new ModelCompressor(); string data = null; await Task.Run(() => { data = comp.CompressAsync(filepath).Result; }); StorageReference moc3Path = Storage_ref.Child("VRP/" + CurrentUser.UserId + "/Live2D/" + Path.GetFileNameWithoutExtension(filepath) + "_model.json"); isUploading = true; fileType.ContentType = "application/json"; await moc3Path.PutBytesAsync(System.Text.Encoding.UTF8.GetBytes(data), fileType).ContinueWith((Task <StorageMetadata> task) => { Debug.Log("start uploading"); if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! isUploading = false; } else { metadata = task.Result; Debug.Log("Finished uploading..."); } isUploading = false; }); }
/// <summary> /// Reformats children if necessary. Should not be called if size() < newMinSize /// </summary> public override MetadataChange Reformat(float newMinSize) { if (size() < newMinSize * 2f) { throw new ArgumentOutOfRangeException("newMinSize", "greater than size()/2. " + "Reformat should be called on parent."); } minSize = newMinSize; if (size() < newMinSize * 4f) { // convert children to voxels MetadataChange change = -SubTreeData(); for (int i = 0; i < 8; i++) { children[i] = new Voxel <T>(children[i].min, children[i].max, minSize, children[i].getPoint(children[i].min), children[i].get(children[i].min)); } return(change + SubTreeData()); } else { // reformat children MetadataChange change = new MetadataChange(); for (int i = 0; i < 8; i++) { change += children[i].Reformat(newMinSize); } return(change); } }
/// <summary> /// updates metadata given MetadataChange from Component classes. /// <summary> private void updateMetadata(MetadataChange change) { numComponents += change.components; numVoxels += change.voxels; numNonNullVoxels += change.nonNullVoxels; volume += change.volume; nonNullVolume += change.nonNullVolume; memSize = ((numComponents - numVoxels) * OctreeContainer <T> .memSize) + (numVoxels * Voxel <T> .memSize); }
/// <summary> /// Sets value at Voxel containing point. /// If updateStruct, re-grids contained space so no voxel contains two points. /// If not, replaces value in vox. /// If Octree does not contain point, will grow until it does. /// <summary> public void set(Vector3 point, T value, bool updateStruct) { if (!root.contains(point)) { grow(point); } MetadataChange change = root.set(point, value, updateStruct); updateMetadata(change); }
public override MetadataChange SubTreeData() { MetadataChange info = new MetadataChange(1, 0, 0, 0, 0); for (int i = 0; i < 8; i++) { info += children[i].SubTreeData(); } return(info); }
// Convert a string in the form: // key1=value1 // ... // keyN=valueN // // to a MetadataChange object. // // If an empty string is provided this method returns null. MetadataChange StringToMetadataChange(string metadataString) { var metadataChange = new MetadataChange(); var customMetadata = new Dictionary <string, string>(); bool hasMetadata = false; foreach (var metadataStringLine in metadataString.Split(new char[] { '\n' })) { if (metadataStringLine.Trim() == "") { continue; } var keyValue = metadataStringLine.Split(new char[] { '=' }); if (keyValue.Length != 2) { DebugLog(String.Format("Ignoring malformed metadata line '{0}' tokens={2}", metadataStringLine, keyValue.Length)); continue; } hasMetadata = true; var key = keyValue[0]; var value = keyValue[1]; if (key == "CacheControl") { metadataChange.CacheControl = value; } else if (key == "ContentDisposition") { metadataChange.ContentDisposition = value; } else if (key == "ContentEncoding") { metadataChange.ContentEncoding = value; Debug.Log("!!!!!ENCODING: " + value.ToString()); } else if (key == "ContentLanguage") { metadataChange.ContentLanguage = value; } else if (key == "ContentType") { metadataChange.ContentType = value; } else { customMetadata[key] = value; } } if (customMetadata.Count > 0) { metadataChange.CustomMetadata = customMetadata; } return(hasMetadata ? metadataChange : null); }
private IEnumerator CoUpload(Texture2D screenshot) { // create a storage ref var storage = FirebaseStorage.DefaultInstance; string filePath = $"/drawings/{Guid.NewGuid()}.png"; Debug.Log(filePath); var screenshotRef = storage.GetReference(filePath); // TODO: perhaps can create a new folder for each game room --> require a game room id instead of drawings // convert texture2d into bytes var bytes = screenshot.EncodeToPNG(); // add any metadata relevant var metadataChange = new MetadataChange() { ContentEncoding = "image/png" }; var uploadTask = screenshotRef.PutBytesAsync(bytes, metadataChange); yield return(new WaitUntil(() => uploadTask.IsCompleted)); Debug.Log("uploaded"); // handle error if (uploadTask.Exception != null) { Debug.LogError($"Failed to upload because {uploadTask.Exception}"); yield break; } // no error continue to get a download url ==> technically not necessary for this game. // can keep this part for the save function var getURLTask = screenshotRef.GetDownloadUrlAsync(); yield return(new WaitUntil(() => getURLTask.IsCompleted)); // handle error if (getURLTask.Exception != null) { Debug.LogError($"Failed to get a download url because {getURLTask.Exception}"); yield break; } Debug.Log("Download from " + getURLTask.Result); // ^ not necessary // save the storage reference of this drawing downloadURL = "gs://picartsso.appspot.com" + filePath; Debug.Log("file location is " + downloadURL); }
/// <summary> /// Splits Voxel into 8 smaller Voxels, returns new Octree Container. /// <summary> public OctreeContainer <T> split(out MetadataChange change) { OctreeContainer <T> replacement = new OctreeContainer <T>(min, max, minSize); /// add original point to new OctreeContainer int childNum = replacement.whichChild(point); var voxBounds = replacement.childBounds(childNum); replacement.setChild(childNum, new Voxel <T>(voxBounds["min"], voxBounds["max"], minSize, point, value)); change = new MetadataChange(dComponents: 8, dVoxels: 7, dNonNullVolume: -0.875 * replacement.volume()); return(replacement); }
public async Task <Uri> UploadImage(Stream image, string path) { var metadata = new MetadataChange { ContentType = "image/jpeg" }; var reference = _storage.RootReference.GetChild(path); await reference.PutStreamAsync(image, metadata).ConfigureAwait(false); return(await reference.GetDownloadUrlAsync().ConfigureAwait(false)); }
/// <summary> /// upload VRM file to server /// </summary> /// <param name="filepath">Current VRM model path</param> public async Task UploadVRM(string filepath) { var fileType = new MetadataChange(); StorageReference vrmPath = Storage_ref.Child("VRP/" + CurrentUser.UserId + "/vrm/" + Path.GetFileName(filepath)); //get thumbnail form vrm var context = new VRMImporterContext(); byte[] vrmByte = null; using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read)) { vrmByte = new byte[fs.Length]; fs.Read(vrmByte, 0, vrmByte.Length); context.ParseGlb(vrmByte); } var meta = context.ReadMeta(true); string th; byte[] thumbnailData = meta.Thumbnail.EncodeToPNG(); try { th = Convert.ToBase64String(thumbnailData); } catch (Exception e) { th = ""; } isUploading = true; fileType.ContentType = "application/vrm"; await vrmPath.PutBytesAsync(vrmByte, fileType).ContinueWith((Task <StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); // Uh-oh, an error occurred! isUploading = false; } else { // Metadata contains file metadata such as size, content-type, and download URL. metadata = task.Result; Debug.Log("Finished uploading..."); } isUploading = false; }); }
public Change(string tableName, MetadataChange tableError = null) { ObjectName = tableName; ChangeType = ChangeType.Table; if (tableError != null) { IsTableError = true; _changeInclude = CheckState.Unchecked; ObjectName += " (Unable to validate source query)"; IsLeaf = true; } else { _changeInclude = CheckState.Checked; IsLeaf = false; } }
public Change(string tableName, MetadataChange tableError = null) { ObjectName = tableName; ChangeType = ChangeType.Table; if (tableError != null) { IsTableError = true; _changeInclude = CheckState.Unchecked; ObjectName += tableError.ChangeType == MetadataChangeType.SourceQueryError ? " (Unable to validate source query)" : " (Metadata for partition \"" + tableError.Partition.Name + "\" differs from other partitions on the table)"; IsLeaf = true; } else { _changeInclude = CheckState.Checked; IsLeaf = false; } }
public void UploadeFile() { Debug.Log("uploading file"); // Get a reference to the storage service, using the default Firebase App FirebaseStorage storage = FirebaseStorage.DefaultInstance; StorageReference storage_ref = storage.GetReferenceFromUrl("gs://pathiktestsih.appspot.com"); // File located on disk string local_file = "file://" + Application.persistentDataPath + "/mapdata.xml"; Debug.Log(local_file); // Create a reference to the file you want to upload // StorageReference file_ref = storage_ref.Child("Map Data/" + CreateHash(Random.Range(100f, 1000f).ToString()) + "/mapdata.xml"); // Create file metadata including the content type var new_metadata = new MetadataChange(); new_metadata.ContentType = "text/xml"; var task = storage_ref.Child("Map Data/" + CreateHash(ID) + "/mapdata.xml") .PutFileAsync(local_file, null, new StorageProgress <UploadState>(state => { // called periodically during the upload Debug.Log(String.Format("Progress: {0} of {1} bytes transferred.", state.BytesTransferred, state.TotalByteCount)); }), CancellationToken.None, null); task.ContinueWith(resultTask => { if (!resultTask.IsFaulted && !resultTask.IsCanceled) { Debug.Log("Upload finished."); ID = "null"; } else { Debug.Log(task.Exception.ToString()); } }); }
public void UploadImagesToFirebase(List <string> Paths) { FilePath = Paths; //Creating a different session everytime the user wants create a scene Debug.Log("Module Started"); string sessionReference = CreateUserSession(); Firebase.Storage.StorageReference session_ref = user_ref.Child(sessionReference); MetadataChange type = new MetadataChange { ContentType = "image/jpeg" }; int Counter = 0; foreach (string ImagePath in Paths) { string imageName = "Image_" + Counter.ToString() + ".JPG"; Counter++; StorageReference folder_ref = session_ref.Child(imageName); folder_ref.PutFileAsync(ImagePath, type) .ContinueWith((Task <StorageMetadata> task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); } else { StorageMetadata metadata = task.Result; string download_url = metadata.DownloadUrl.ToString() + "\n"; UTF8Encoding uniEncoding = new UTF8Encoding(true); File.WriteAllText(fileName, download_url); images.Add(download_url); Debug.Log(download_url); uploadCount++; CheckIfComplete(); } } ); } }
public Change(MetadataChange metadataChange) { MetadataChange = metadataChange; IsLeaf = true; ChangeInclude = CheckState.Checked; ObjectName = metadataChange.ModelColumn?.Name ?? "(Not imported)"; SourceColumn = metadataChange.ModelColumn?.SourceColumn ?? metadataChange.SourceColumn; ModelDataType = metadataChange.ModelColumn?.DataType.ToString() ?? ""; SourceDataType = string.IsNullOrEmpty(metadataChange.SourceProviderType) ? null : metadataChange.SourceType.ToString(); switch (metadataChange.ChangeType) { case MetadataChangeType.DataTypeChange: Description = "Change Data Type"; ChangeType = ChangeType.EditDataType; break; case MetadataChangeType.SourceColumnAdded: Description = "Import Column"; ChangeType = ChangeType.AddColumn; break; case MetadataChangeType.SourceColumnNotFound: Description = "Remove Column"; ChangeType = ChangeType.RemoveColumn; break; } }
private IEnumerator UploadCoroutine(Texture2D screenshot) { #region DateTime-Set DateTime dateTime = DateTime.Now; // 시-분-초 string time = dateTime.Hour.ToString() + "-" + dateTime.Minute.ToString() + "-" + dateTime.Second.ToString(); #endregion string TOTAL_DATE = dateTime.ToShortDateString() + "+" + time; FirebaseStorage storage = FirebaseStorage.DefaultInstance; StorageReference screenshotReference = storage.GetReferenceFromUrl(PATH).Child($"/screenshots/{TOTAL_DATE}.png"); #region Set-Metadata var metadataChange = new MetadataChange() { ContentEncoding = "image/png", /* 여기는 메타데이터 설정 * CustomMetadata = new Dictionary<string, string>() * { * { "Position", Camera.main.transform.position.ToString()}, * { "Rotation", Camera.main.transform.position.ToString()} * } */ }; #endregion var bytes = screenshot.EncodeToPNG(); var uploadTask = screenshotReference.PutBytesAsync(bytes, metadataChange); yield return(new WaitUntil(() => uploadTask.IsCompleted)); if (uploadTask.Exception != null) { Debug.LogError($"업로드에 실패했습니다. {uploadTask.Exception}"); yield break; } }
/// <summary> /// Reformats octree upon increase in MinSize. /// Growing octree resets all data. /// </summary> private void Reformat(float newMinValue) { if (root.size() < newMinValue * 2f) { root = new OctreeContainer <T>(root.min, root.min + new Vector3(newMinValue * 2, newMinValue * 2, newMinValue * 2), MinSize); numComponents = 9; numVoxels = 8; numNonNullVoxels = 1; volume = root.volume(); nonNullVolume = root.volume() / 8f; } else { MetadataChange change = new MetadataChange(); for (int i = 0; i < 8; i++) { change += root.children[i].Reformat(newMinValue); } updateMetadata(change); } }
// Returns the top times, given the level's database path and map id. // Upload the replay data to Firebase Storage private static Task <StorageMetadata> UploadReplayData( UserScore userScore, ReplayData replay, UploadConfig config) { StorageReference storageRef = FirebaseStorage.DefaultInstance.GetReference(config.storagePath); // Serializing replay data to byte array System.IO.MemoryStream stream = new System.IO.MemoryStream(); replay.Serialize(stream); stream.Position = 0; byte[] serializedData = stream.ToArray(); // Add database path and time to metadata for future usage MetadataChange newMetadata = new MetadataChange { CustomMetadata = new Dictionary <string, string> { { "DatabaseReplayPath", config.dbSharedReplayPath }, { "DatabaseRankPath", config.dbRankPath }, { "Time", userScore.Score.ToString() }, { "Shared", config.shareReplay.ToString() }, } }; return(storageRef.PutBytesAsync(serializedData, newMetadata)); }
public MainPageViewModel(INavigationService navigationService) : base(navigationService) { Title = "Main Page"; SelectImageCommand.Subscribe(async() => { try { if (!CrossMedia.Current.IsPickPhotoSupported) { return; } var file = await CrossMedia.Current.PickPhotoAsync(new Media.Abstractions.PickMediaOptions { PhotoSize = Media.Abstractions.PhotoSize.Medium }); if (file == null) { return; } var name = Path.GetFileName(file.Path); var stream = file.GetStream(); file.Dispose(); Image.Value = null; UploadProgress.Value = 0; DownloadProgress.Value = 0; Name.Value = null; Size.Value = 0; CreationTime.Value = null; Url.Value = null; var reference = CrossFirebaseStorage.Current.Instance.RootReference.Child(name); var uploadProgress = new Progress <IUploadState>(); uploadProgress.ProgressChanged += (sender, e) => { UploadProgress.Value = e.TotalByteCount > 0 ? 100.0 * e.BytesTransferred / e.TotalByteCount : 0; }; var metadataChange = new MetadataChange { ContentType = "image/jpeg" }; await reference.PutStreamAsync(stream, metadataChange, uploadProgress); UploadProgress.Value = 100; var downloadProgress = new Progress <IDownloadState>(); downloadProgress.ProgressChanged += (sender, e) => { DownloadProgress.Value = e.TotalByteCount > 0 ? 100.0 * e.BytesTransferred / e.TotalByteCount : 0; }; var data = await reference.GetStreamAsync(downloadProgress); DownloadProgress.Value = 100; Image.Value = ImageSource.FromStream(() => data); var metadata = await reference.GetMetadataAsync(); Name.Value = metadata.Name; Size.Value = metadata.SizeBytes; CreationTime.Value = metadata.CreationTime.LocalDateTime; var url = await reference.GetDownloadUrlAsync(); Url.Value = url.ToString(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); } }); }