実際にファイル入力があり、そのファイルのBase64データを取得したいのですが。
私は試した:
$('input#myInput')[0].files[0]
データを取得します。ただし、名前、長さ、コンテンツタイプのみが提供され、データ自体は提供されません。
Amazon S3に送信するには、実際にこれらのデータが必要です。
私はすでにAPIをテストしていて、エンコード・タイプ "multipart/form-data"のHTMLフォームを介してデータを送信すると、それは機能します。
私はこのプラグインを使用します。 http://jasny.github.com/bootstrap/javascript.html#fileupload
そしてこのプラグインは私に写真のプレビューを与え、そして私は画像プレビューのsrc属性のデータを検索します。しかし、これらのデータをS3に送信してもうまくいきません。多分 "multipart/form-data"のようにデータをエンコードする必要があるかもしれませんが、その理由はわかりません。
HTMLフォームを使用せずにこれらのデータを取得する方法はありますか?
あなたはこのようなものFileReader APIを試すことができます。
<!DOCTYPE html>
<html>
<head>
<script>
function handleFileSelect()
{
if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
alert('The File APIs are not fully supported in this browser.');
return;
}
input = document.getElementById('fileinput');
if (!input) {
alert("Um, couldn't find the fileinput element.");
}
else if (!input.files) {
alert("This browser doesn't seem to support the `files` property of file inputs.");
}
else if (!input.files[0]) {
alert("Please select a file before clicking 'Load'");
}
else {
file = input.files[0];
fr = new FileReader();
fr.onload = receivedText;
//fr.readAsText(file);
fr.readAsDataURL(file);
}
}
function receivedText() {
document.getElementById('editor').appendChild(document.createTextNode(fr.result));
}
</script>
</head>
<body>
<input type="file" id="fileinput"/>
<input type='button' id='btnLoad' value='Load' onclick='handleFileSelect();'>
<div id="editor"></div>
</body>
</html>
入力ファイル要素:
<input type="file" id="fileinput" />
ファイルを取得:
var myFile = $('#fileinput').prop('files');
フォームデータオブジェクトを作成してファイルを追加しました。
var form = new FormData();
form.append("video", $("#fileInput")[0].files[0]);
そして私は得た:
------WebKitFormBoundaryNczYRonipfsmaBOK
Content-Disposition: form-data; name="video"; filename="Wildlife.wmv"
Content-Type: video/x-ms-wmv
送信されたヘッダーに。ファイルが送信され、サーバー上のフォルダーに保存されているので、これが機能することを確認できます。 FormDataオブジェクトの使い方がわからない場合は、オンラインのドキュメントがいくつかありますが、それほど多くはありません。 Mozillaによるフォームデータオブジェクトの説明
HTML:
<input type="file" name="input-file" id="input-file">
jQuery:
var fileToUpload = $('#input-file').prop('files')[0];
Prop( 'files')は配列を返すので、最初の要素だけを取得します。
タイプinput
のfile
エレメント
<input id="fileInput" type="file" />
input
の変更時にFileReader
オブジェクトを使用し、input
ファイルのプロパティを読みます。
$('#fileInput').on('change', function () {
var fileReader = new FileReader();
fileReader.onload = function () {
var data = fileReader.result; // data <-- in this var you have the file data in Base64 format
};
fileReader.readAsDataURL($('#fileInput').prop('files')[0]);
});
FileReaderはあなたのファイルをロードし、fileReader.result
であなたはBase64フォーマットのファイルデータを持っています(ファイルコンテンツタイプ(MIME)、text/plain、image/jpgなど)。
JQueryを使ったFileReader API、簡単な例。
( function ( $ ) {
// Add click event handler to button
$( '#load-file' ).click( function () {
if ( ! window.FileReader ) {
return alert( 'FileReader API is not supported by your browser.' );
}
var $i = $( '#file' ), // Put file input ID here
input = $i[0]; // Getting the element from jQuery
if ( input.files && input.files[0] ) {
file = input.files[0]; // The file
fr = new FileReader(); // FileReader instance
fr.onload = function () {
// Do stuff on onload, use fr.result for contents of file
$( '#file-content' ).append( $( '<div/>' ).html( fr.result ) )
};
//fr.readAsText( file );
fr.readAsDataURL( file );
} else {
// Handle errors here
alert( "File not selected or browser incompatible." )
}
} );
} )( jQuery );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="file" />
<input type='button' id='load-file' value='Load'>
<div id="file-content"></div>
テキストとして読むには... //fr.readAsText(file);
行のコメントを外してfr.readAsDataURL(file);
をコメントアウトしてください
<script src="~/fileupload/fileinput.min.js"></script>
<link href="~/fileupload/fileinput.min.css" rel="stylesheet" />
Fileinputという名前の上記のファイルをダウンロードして、インデックスページにパスを追加します。
<div class="col-sm-9 col-lg-5" style="margin: 0 0 0 8px;">
<input id="uploadFile1" name="file" type="file" class="file-loading"
`enter code here`accept=".pdf" multiple>
</div>
<script>
$("#uploadFile1").fileinput({
autoReplace: true,
maxFileCount: 5
});
</script>