drupal サービス/ファイルを使用して、イメージを Drupal に保存する必要があります。私が理解していることについては、ファイルをbase64にデコードし、これをサービス/ファイルのペイロードとして送信する必要があります。これを行うためにエンコードするにはどうすればよいですか???? これをjavascriptでやりたいです。
6 に答える
@GrimurD で言及されているように、私はangular-base64-upload の作成者です。このディレクティブは、このシナリオで完全に機能します。画像 (またはその他のファイルの種類) を base64 エンコードに解析し、ファイル情報をスコープ内のモデルに添付します。
使用例:
<input type='file' ng-model='yourModel' base-sixty-four-input>
ファイルを選択するyourModel
と、次のような値になります。
{
"filetype": "text/plain",
"filename": "textfile.txt",
"base64": "/asdjfo4sa]f57as]fd42sdf354asdf2as35fd4"
}
また、PHP または Ruby を使用して、サーバー内の base64 ファイルをデコードするためのサンプル コードも含まれています。
かなり古いことは知っていますが、解決策を求めてここに来ました。
最後に、(外部ライブラリを使用したくない場合) base 64 での画像の読み込みは、javascript FileReader.readAsDataURL()を使用するのと同じくらい簡単であることがわかりました。
私の最終的なコードが私のような他の初心者に役立つことを願っています。特徴:
- HTML5 を使用した入力ファイル(この回答に
input type='file'
触発された) - 他のhtml要素からの入力をトリガーします(この回答に触発されました)
- ブラウザがサポートしているかどうかを確認します(この回答に
input type='file'
触発されました)
コードペンにもあります
angular.module('starter', [])
.controller('Ctrl', function($scope) {
$scope.data = {}; //init variable
$scope.click = function() { //default function, to be override if browser supports input type='file'
$scope.data.alert = "Your browser doesn't support HTML5 input type='File'"
}
var fileSelect = document.createElement('input'); //input it's not displayed in html, I want to trigger it form other elements
fileSelect.type = 'file';
if (fileSelect.disabled) { //check if browser support input type='file' and stop execution of controller
return;
}
$scope.click = function() { //activate function to begin input file on click
fileSelect.click();
}
fileSelect.onchange = function() { //set callback to action after choosing file
var f = fileSelect.files[0],
r = new FileReader();
r.onloadend = function(e) { //callback after files finish loading
$scope.data.b64 = e.target.result;
$scope.$apply();
console.log($scope.data.b64.replace(/^data:image\/(png|jpg);base64,/, "")); //replace regex if you want to rip off the base 64 "header"
//here you can send data over your server as desired
}
r.readAsDataURL(f); //once defined all callbacks, begin reading the file
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
<body ng-app='starter' ng-controller='Ctrl'>
<button ng-click='click()'>click to select and get base64</button>
<br>BASE 64 data:
<br>
<span style='color: red'>{{data.alert}}</span>
<div style='word-wrap:break-word'>
{{data.b64}}
</div>
</body>
https://github.com/ninjatronic/angular-base64を使用することをお勧めします。
このライブラリを使用するための手順に従った後、次のように呼び出すことができます。
var imageData=$base64.encode(image);
モジュールに挿入することを忘れないでください:
.module('myApp', ['base64'])
私はいくつかのウェブサイトを見つけました.Chromeのようなブラウザ、ie10..これをサポートしているかもしれません https://developer.mozilla.org/en-US/docs/Web/API/FileReader?redirectlocale=en-US&redirectslug=DOM%2FFileReader
私は同じ問題を抱えていて、github でこのリポジトリに遭遇しました。試してみたところ、完璧に機能しました。
そのためにAngularJsは必要ありません。Javascript とキャンバスを使用してそれを行う方法を説明するスレッドがここにあります: How to convert image into base64 string using javascript