将文件转换为基本 64 位 javascript
issue converting file to base 64bit javascript
我正在尝试为 Dynamics CRM 制作一个 java 脚本 Web 资源,它实质上允许用户选择要上传的文件,然后将其存储到注释实体中。我知道执行此操作的一般程序,但它会不断上传空文件。数据未使用 base 64 函数转换为 base 64。我很难使用 File reader 函数将上传的文件转换为 base 64。dataURL 变量一直返回空。有人可以帮我将所选文件转换为 base 64 吗?这不一定是特定于动态的,我认为它是一个一般的 java 脚本 html 问题。我想我错误地使用了 File reader 函数。
谢谢
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)" >
我已经弄明白了,对于其他有类似问题的人。事实证明,您不能在 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);
我正在尝试为 Dynamics CRM 制作一个 java 脚本 Web 资源,它实质上允许用户选择要上传的文件,然后将其存储到注释实体中。我知道执行此操作的一般程序,但它会不断上传空文件。数据未使用 base 64 函数转换为 base 64。我很难使用 File reader 函数将上传的文件转换为 base 64。dataURL 变量一直返回空。有人可以帮我将所选文件转换为 base 64 吗?这不一定是特定于动态的,我认为它是一个一般的 java 脚本 html 问题。我想我错误地使用了 File reader 函数。
谢谢
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)" >
我已经弄明白了,对于其他有类似问题的人。事实证明,您不能在 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);