Unity C#向Firebase Storage上传.txt文件的代码修改方案咨询
修改方案
你的现有代码已经配置了txt文件的选择过滤器,只需要调整3处硬编码逻辑即可同时支持jpeg、txt等格式的上传:
- (可选调整)修改
Start方法中的默认文件过滤器,将默认选中的格式从.jpg改为你常用的格式,若高频上传txt可改为.txt - 读取选中文件后,动态提取文件后缀与原始文件名,避免所有文件都按照jpeg的配置上传
- 根据文件后缀匹配正确的MIME类型,替换硬编码的
image/jpeg内容类型配置 - 替换硬编码的上传路径
uploads/newFile.jpeg,使用原始文件名作为存储文件名,避免文件覆盖
修改后完整代码
using UnityEngine; using System.Collections; using System.Collections.Generic; //For Picking files using System.IO; using SimpleFileBrowser; //For firebase storage using Firebase; using Firebase.Extensions; using Firebase.Storage; public class UploadFile : MonoBehaviour { FirebaseStorage storage; StorageReference storageReference; // Start is called before the first frame update void Start() { FileBrowser.SetFilters(true, new FileBrowser.Filter("Images", ".jpg", ".png"), new FileBrowser.Filter("Text Files", ".txt", ".pdf")); // 此处可修改默认选中的过滤器,如需默认选txt改为".txt"即可 FileBrowser.SetDefaultFilter(".jpg"); FileBrowser.SetExcludedExtensions(".lnk", ".tmp", ".zip", ".rar", ".exe"); storage = FirebaseStorage.DefaultInstance; storageReference = storage.GetReferenceFromUrl("gs://app_name.appspot.com/"); } public void OnButtonClick() { StartCoroutine(ShowLoadDialogCoroutine()); } IEnumerator ShowLoadDialogCoroutine() { yield return FileBrowser.WaitForLoadDialog(FileBrowser.PickMode.FilesAndFolders, true, null, null, "Load Files and Folders", "Load"); Debug.Log(FileBrowser.Success); if (FileBrowser.Success) { // 取第一个选中的文件路径 string selectedFilePath = FileBrowser.Result[0]; // 提取原始文件名 string fileName = Path.GetFileName(selectedFilePath); // 提取文件后缀 string fileExt = Path.GetExtension(selectedFilePath).ToLower(); byte[] bytes = FileBrowserHelpers.ReadBytesFromFile(selectedFilePath); // 动态配置ContentType var newMetadata = new MetadataChange(); switch (fileExt) { case ".jpg": case ".jpeg": newMetadata.ContentType = "image/jpeg"; break; case ".png": newMetadata.ContentType = "image/png"; break; case ".txt": newMetadata.ContentType = "text/plain"; break; case ".pdf": newMetadata.ContentType = "application/pdf"; break; default: newMetadata.ContentType = "application/octet-stream"; break; } // 动态设置上传路径,用原始文件名 StorageReference uploadRef = storageReference.Child($"uploads/{fileName}"); Debug.Log("File upload started"); uploadRef.PutBytesAsync(bytes, newMetadata).ContinueWithOnMainThread((task) => { if (task.IsFaulted || task.IsCanceled) { Debug.Log(task.Exception.ToString()); } else { Debug.Log("File Uploaded Successfully!"); } }); } } }
内容的提问来源于stack exchange,提问作者Mr. 17
相关产品推荐
相关产品推荐

