【问题标题】:issue converting file to base 64bit javascript将文件转换为基本 64 位 javascript 的问题
【发布时间】:2017-07-06 20:35:15
【问题描述】:

我正在尝试为动态 CRM 制作一个 Java 脚本 Web 资源,它本质上是让用户选择要上传的文件,然后将其存储到注释实体中。我知道执行此操作的一般程序,但是它会不断上传空文件。数据未使用 base 64 函数转换为 base 64。我很难使用文件阅读器功能将上传的文件转换为 base 64。dataURL 变量一直返回空。有人可以帮我将所选文件转换为 base 64 吗?这不一定是动态的,我认为它是一个一般的 java 脚本 html 问题。我想我使用文件阅读器功能错误。

谢谢

function uploadFile(event) {
    var input = event.target;
    var file = input.files[0];
    //var file = document.getElementById("myFile").files[0];

    var str;
    var reader = new FileReader();
    reader.onload = function() {
        var dataURL = reader.result;

        str = _arrayBufferToBase64(dataURL);    
    };

    reader.readAsDataURL(input.files[0]);
    
    var id = window.parent.Xrm.Page.data.entity.getId();
    var nam = window.parent.Xrm.Page.data.entity.getEntityName();
  
    var entity = {};
    entity.Subject = "first new annotation3";
    entity.NoteText = "way to go you just made a new annotation";
    entity.DocumentBody = str;
    entity.FileName = file.name;
    entity.MimeType = file.type;
    entity.ObjectId = {
        Id: id,
        LogicalName: nam
    };

    SDK.REST.createRecord(entity, "Annotation", SucessCallback2, errorCallback2);
}

function _arrayBufferToBase64(buffer) { // Convert Array Buffer to Base 64 string
    var binary = '';
    var bytes = new Uint8Array(buffer);
    var len = bytes.byteLength;

    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode(bytes[i]);
    }
    return window.btoa(binary);
}
<
input type = "file"
id = "myFile"
placeholder = "Choose File"
onchange = "uploadFile(event)" > 

【问题讨论】:

标签: javascript html dynamics-crm-2013


【解决方案1】:

我想通了,对于其他有类似问题的人。事实证明,您不能在 onload 函数之外获取数据,您必须使用回调函数将数据传递给另一个函数。见下文。

function uploadFile(event)
{	
    var input  = event.target;
    var file = input.files[0];
    //var file = document.getElementById("myFile").files[0];
    var str;
				
    var reader = new FileReader();
				
    reader.onload = function(eve){
    var theResult = reader.result;
    str = _arrayBufferToBase64(theResult);
    AttachFileFunction(file.name,file.type,str);
};
			
reader.readAsArrayBuffer(file);
	 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2021-05-12
    • 2011-02-01
    • 1970-01-01
    • 2020-10-16
    • 2021-01-22
    • 2014-09-11
    相关资源
    最近更新 更多