2017-07-06 8 views
0

私はダイナミクスCRM用のJavaスクリプトWebリソースを作成しようとしています。これは、ユーザーがアップロードするファイルを選択し、それを注釈エンティティに格納することができます。私はこれを行う一般的な手順を知っているが、空のファイルをアップロードし続ける。データはベース64関数を使用してベース64に変換されません。私は、FileReader関数を使用して、ベース64にアップロードされたファイルを変換するのに苦労しています。選択したファイルをベース64に変換するのを助けることができますか?これはダイナミクス固有のものである必要はありません私はその一般的なJavaスクリプトhtmlの問題だと思います。私はファイルリーダー機能を間違って使用していると思います。ファイルを基本64bit javascriptに変換する問題

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)" >

+0

、このjsfiddle例をチェックアウトhttp://jsfiddle.net/qL86Z/8/このstackoverflowの質問https://stackoverflow.com/questions/14967647/encode-decode- image-with-base64-breaks-image – sissonb

答えて

1

ありがとう、私は誰にも同様の問題を持つため、それを考え出しました。あなたはonload関数の外側でデータを取り込むことができないことが判明したので、コールバック関数を使用してデータを別の関数に渡す必要があります。下記参照。

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

関連する問題