You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:18:01