js代码
ClickSelectFileBtn: function () {
function sendMessageToUnity(s) {
//发送给unity
unityInstance.SendMessage("WebSocket", "GetBase64", s);
}
//<input type="file" id="files" style="display:none" accept="text/plain" onchange="fileImport()">
var doc = document.getElementById('files');
if (doc != null)
{
doc.parentNode.removeChild(doc);//相同数据流不会执行onchange;删除节点重新生成
}
//if (doc == null) {
doc = document.createElement("input")
doc.type = "file";
doc.id = "files";
doc.style = "display:none";//隐藏网页按钮
doc.accept = "text/plain";//限定显示文件类型
//https://stackoverflow.com/questions/11832930/html-input-file-accept-attribute-file-type-csv
doc.onchange = fileImport;
document.body.appendChild(doc);
console.log("createElement");
//}
console.log("createElement22");
doc.click();
function fileImport () {
console.log("fileImport");
//获取读取我文件的File对象
var selectedFile = document.getElementById('files').files[0];
if (selectedFile != null) {
console.log(selectedFile);
var reader = new FileReader();
reader.readAsDataURL(selectedFile);
reader.onload = function (e) {
var base64Str = e.currentTarget.result.substring(e.currentTarget.result.indexOf(',') + 1);
arr = [];
step = 3000;
for (var i = 0, l = base64Str.length; i < l; i += step) {
arr.push(base64Str.slice(i, i + step))
}
sendMessageToUnity("Start");
for (i = 0; i < arr.length; i++) {
sendMessageToUnity(arr[i]);
}
sendMessageToUnity("End");
}
}
}
}
C#代码
[DllImport("__Internal")]
private static extern void ClickSelectFileBtn();
public void OnClickSelectFileBtn(ISetText value)
{
iSetText = value;
ClickSelectFileBtn();
}
StringBuilder stringBuilder = new StringBuilder();
public void GetBase64(string base64Str)
{
if (base64Str == "Start")
{
stringBuilder.Clear();
}
else if (base64Str == "End")
{
byte[] bs = Convert.FromBase64String(stringBuilder.ToString());
//比如String 或 图片之类的 System.Text.Encoding.UTF8.GetString(bs);
}
else
{
stringBuilder.Append(base64Str);
}
}