HTML5 Canvasをファイルに変換してアップロードするには?
2023-09-08 06:05:46
質問
標準的なHTMLファイルのアップロードは、以下のように動作します。
<g:form method="post" accept-charset="utf-8" enctype="multipart/form-data"
name="form" url="someurl">
<input type="file" name="file" id="file" />
</form>
私の場合、html5 のキャンバスに画像を読み込んで、それをファイルとしてサーバーに送信したいのです。 私はできます。
var canvas; // some canvas with an image
var url = canvas.toDataURL();
これでbase64でimage/pngが得られます。
入力タイプのファイルと同じように、base64の画像をサーバに送るにはどうしたらよいでしょうか?
input type="file"の中にあるbase64ファイルが、ファイルと同じタイプでないことが問題です。
サーバーのために型が同じであるbase64をどうにかして変換できないでしょうか?
どのように解決するのですか?
セキュリティ上の理由から、file-input要素に直接値を設定することはできません。
file-input要素を使用したい場合。
- キャンバスから画像を作成する(行ったように)。
- その画像を新しいページに表示する。
- ユーザーに右クリックでローカルドライブに名前を付けて保存させる。
- その後、ユーザーは file-input 要素を使用して、新しく作成されたファイルをアップロードすることができます。
あるいは、Ajax を使用して canvas のデータを POST することもできます。
blobについて質問されました。
var blobBin = atob(dataURL.split(',')[1]);
var array = [];
for(var i = 0; i < blobBin.length; i++) {
array.push(blobBin.charCodeAt(i));
}
var file=new Blob([new Uint8Array(array)], {type: 'image/png'});
var formdata = new FormData();
formdata.append("myNewFileName", file);
$.ajax({
url: "uploadFile.php",
type: "POST",
data: formdata,
processData: false,
contentType: false,
}).done(function(respond){
alert(respond);
});
注意:blobは最新のブラウザで一般的にサポートされています。
関連
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] アップロード前に画像をプレビューする
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
-
[解決済み] 再描画のためにキャンバスをクリアする方法
-
[解決済み】HTML5 Canvasをサーバーに画像として保存する方法は?
-
[解決済み】PNG画像をサーバーサイドで保存する方法(base64データのURIから)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTML5 Canvasをサーバーに画像として保存する方法は?
-
[解決済み】データURIをファイルに変換してFormDataに追記する。
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] 各オブジェクトに?重複