UNITY 打包web端打开文件对话框上传文件

web端打开文件对话框需要调用js代码中的input元素,所以首先需要在Assets\Plugins文件夹下创建.jslib文件放js代码,创建好之后可使用vs code打开jslib文件,并使用javascript语言
使用input元素时需要先创建input,然后点击input打开文件对话框,所以需要分为两步:
1.unity点击按钮1创建input元素
2.unity点击按钮2通过input元素拉起文件对话框
一、 .jslib文件中创建input元素部分代码如下:

 function LoadFile() {
        var fileInput = document.createElement('input');//创建input元素
        fileInput.setAttribute('id', "load");//给创建的input设置id
        fileInput.accept=".xls,.xlsx";//以excel表为例,打开其他文件时自行设置
        fileInput.setAttribute('type', 'file');
        fileInput.setAttribute('style','display:none;');
        fileInput.setAttribute('style','visibility:hidden;'); 
        fileInput.setAttribute('multiple', '');
        fileInput.disabled=true;//使input元素不可点击,否则会导致页面上所有位置都可唤起文件对话框
        document.body.appendChild(fileInput);
     }

在UNITY中调用该方法

[DllImport("__Internal")]
    private static extern void LoadFile();
public void Add_File()
{
    if (Application.platform == RuntimePlatform.WebGLPlayer)
    {
       LoadFile();//web端调用方法
    }
}

将Add_File()挂在创建按钮1上

二、.jslib文件中拉起文件对话框部分代码如下:

function OpenFile()
    {
        var fileInput = document.getElementById("load");//通过id获取创建好的input元素
        fileInput.disabled=false;//设置input可点击,否则无法通过click()打开文件对话框
        fileInput.click()//打开文件对话框
        fileInput.onclick = function (event) {
            this.value = null;
        };
        fileInput.onchange = function (event) {
           //如果需要在unity中获取文件内容,在onchange中获取后通过SendMessage()传回给unity
           var test = new FileReader();
            var file = this.files[0];
            test.readAsArrayBuffer(file);
            test.onload = function(e){
                 var data = e.target.result;
                 var wb = window.XLSX.read(data,{type:'binary'});
                 var sheetName = wb.SheetNames[0]
                 var sheets = wb.Sheets[sheetName]
                  //转换为json格式
                 var source=JSON.stringify(XLSX.utils.sheet_to_json(sheets));
                 SendMessage("Import", "OnDataUpload", source);//Import是接收数据的cs文件名,OnDataUpload是接收数据的回调函数名
        }
        document.onmouseup = function() {
            fileInput.click();
            document.onmouseup = null;
        }
        fileInput.disabled=true;//结束时再次设置input不可点击,保证点击其他位置无法打开文件对话框
        //确保只有点击按钮2时才能打开文件对话框
    }

UNITY接收excel数据代码,注意接收到的数据不要直接使用,赋值给已有的字符串变量后再使用


    string exceldata;
    public void OnDataUpload(string data)//获取Excel数据
    {
        exceldata = System.Net.WebUtility.UrlDecode(data);
    }

在UNITY中调用该方法

[DllImport("__Internal")]
    private static extern void OpenFile();
    public void FileOpen()
    {
        if (Application.platform == RuntimePlatform.WebGLPlayer)
        {
            OpenLoadFile();
        }
     }

将FileOpen()挂在创建按钮2上

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值