Bootstrap FileInputは画像アップロード機能を実装します

Bootstrap FileInputは画像アップロード機能を実装します

この記事の例では、Bootstrap FileInputの具体的なコードを共有して、画像アップロード機能を実装しています。具体的な内容は次のとおりです。

HTMLコード:

<div class="フォームグループ">
 <label class="col-sm-2 control-label">画像</label>
 <div class="col-sm-8">
  <input id="filesInput" type="file" multiple data-browse-on-zone-click="true" class="file-loading" accept="image/*" />
  <input id="resources" name="resources" th:value="${record.picUrls}" type="hidden">//アップロードされた画像のパスを取得します。$("#filesInput").val() では取得できないため、hidden input を使用して取得します</div>
</div>

jsファイルとcssファイルをインポートする

<link href="/ajax/libs/bootstrap-fileinput/fileinput.css" rel="スタイルシート" type="text/css"/>
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/bootstrap.min.js}"></script>
<script th:src="@{/ajax/libs/bootstrap-fileinput/fileinput.js}"></script>

jsコード:

var List = new Array(); //ファイル名とIDを受け入れるグローバル変数を定義する
$(関数() {
 var picStr = [
http:...,
http:.... です。
];
var picStrConfig = [
{キャプション: "11111", 幅: "120px", ファイルID: "123456", URL: "deleteData", タイプ: "image", キー: "1"},
........
];
$('#filesInput').ファイル入力({
 テーマ: 'fas'、
 言語: 'zh',
 アップロード URL: ctx + 'bike/record/uploadData',
 uploadAsync: true, //デフォルトの非同期アップロード showUpload: true, //アップロードボタンを表示するかどうか overwriteInitial: false,
 showRemove : false, //削除ボタンを表示する// showPreview : true, //プレビューを表示するかどうか showCaption: false, //タイトルを表示するかどうか browseClass: "btn btn-primary", //ボタンのスタイル dropZoneEnabled: false, //ドラッグゾーンを表示するかどうか maxFileCount: 5, //同時にアップロードできるファイルの最大数を示します enctype: 'multipart/form-data',
 検証初期カウント:true、
 レイアウトテンプレート: {actionUpload: ''},
 最大ファイル数: 5,
 ファイルタイプ: "任意",
 許可されたプレビュータイプ: ['画像'],
 プレビューファイルアイコン: "<i class='glyphicon glyphicon-king'></i>",
 初期プレビューデータ: true、
 initialPreview: picStr, //エコー画像パスを初期化 initialPreviewConfig: picStrConfig //プレビューのパラメータをいくつか設定}).on("fileuploaded", function (event, data, previewId, index) {
 var レスポンス = data.response;
 var filePath = data.response.filePath; // ファイルが正常にアップロードされた後に返されるファイル名。カスタムファイル名を返すこともできます。List.push({ FileName: filePath, KeyID: previewId })
 // アラート(response.filePath);
 // $("#fileMd5").val(response.fileMd5);
 // $("#version").val(response.newVersionName);
 var リソース = $('#resources').val();
 if (!リソース){
  $("#resources").val(レスポンス.filePath);
 }それ以外{
  $("#resources").val(resources+"^_^"+response.filePath);
 }
 
 
}).on('filepredelete', function(event, data, previewId, index) { //元の画像を削除する前にアクションをトリガーします}).on('filedeleted',function (event, data, previewId, index){//元の画像を削除した後のアクションvar resources = $("#resources").val();
 var レスポンス = previewId.responseJSON;
 if(レスポンスコード == 0){
  var deleteName = "/"+データ;
  if(resources.indexOf("^_^"+deleteName)>-1){
   $("#resources").val("^_^"+resources.replace(deleteName,""));
   リソース = $("#resources").val();
  }
  if(resources.indexOf(deleteName+"^_^")>-1){
   $("#resources").val(resources.replace(deleteName+"^_^",""));
   リソース = $("#resources").val();
  }
  (resources.indexOf(deleteName)>-1)の場合{
   $("#resources").val(resources.replace(deleteName,""));
   リソース = $("#resources").val();
  }
 }
}).on('filepreupload', 関数(イベント、データ、プレビューID、インデックス) {
 var フォーム = data.form、ファイル = data.files、追加 = data.extra、
  レスポンス = data.response、リーダー = data.reader;
}).on("filesuccessremove", 関数(イベント、データ、プレビューID、インデックス) {
 var リソース = $("#resources").val();
 (var i = 0; i < List.length; i++) の場合 {
  リスト[i].KeyID == データの場合{
   if(resources.indexOf("^_^"+List[i].FileName)>-1){
    $("#resources").val("^_^"+resources.replace(List[i].FileName,""));
    リソース = $("#resources").val();
   }
   if(resources.indexOf(List[i].FileName+"^_^")>-1){
    $("#resources").val(resources.replace(List[i].FileName+"^_^",""));
    リソース = $("#resources").val();
   }
   if(resources.indexOf(List[i].FileName)>-1){
    $("#resources").val(resources.replace(List[i].FileName,""));
    リソース = $("#resources").val();
   }
   リスト[i].KeyID = "1"
  }
 }
});
})

Javaコード:

/**
  * ファイルをアップロード */
 @RequestMapping("/アップロードデータ")
 @レスポンス本文
 public Map<String, Object> uploadData(HttpServletRequest リクエスト、HttpServletResponse レスポンス) 例外をスローします{
  リクエスト.setCharacterEncoding("UTF-8");
  Map<String, Object> json = new HashMap<String, Object>();
  マルチパートHttpServletRequest マルチパートリクエスト = (マルチパートHttpServletRequest) リクエスト;
 
  /** ページコントロールのファイルストリーム * */
  マルチパートファイル multipartFile = null;
  マップ map =multipartRequest.getFileMap();
  (イテレータ i = map.keySet().iterator(); i.hasNext();) {
   オブジェクト obj = i.next();
   multipartFile=(マルチパートファイル) map.get(obj);
 
  }
  /** ファイルのサフィックスを取得します * */
  文字列ファイル名 = multipartFile.getOriginalFilename();
 
  入力ストリーム 入力ストリーム;
  文字列パス = "";
  文字列 fileMd5 = "";
  試す {
   /** ファイルをリポジトリにアップロードする **/
   入力ストリーム = multipartFile.getInputStream();
   ファイル tmpFile = File.createTempFile(ファイル名,
   ファイル名.substring(ファイル名.lastIndexOf(".")));
   fileMd5 = Files.hash(tmpFile, Hashing.md5()).toString();
   FileUtils.copyInputStreamToFile(入力ストリーム、tmpFile);
   /** MinIO にアップロード**/
   パス = minioFileUtil.uploadCustomize(multipartFile.getInputStream(), filename.substring(filename.lastIndexOf(".")), "",multipartFile.getContentType());
   /** Alibaba Cloud OSS にアップロード **/
// パス = AliOSSUtils.getInstance().multpartFileUpload(multipartFile,"bike");
   tmpFile を削除します。
 
  } キャッチ (例外 e) {
   e.printStackTrace();
   logger.error("アップロードに失敗しました",e);
   json.put("fileMd5", fileMd5);
   json.put("message", "アップロードに失敗しました");
   json.put("ステータス", false);
   json.put("ファイルパス", パス);
   json を返します。
  }
  json.put("fileMd5", fileMd5);
  json.put("message", "アップロードに成功しました");
  json.put("ステータス", true);
  json.put("ファイルパス", パス);
  json.put("キー", UUIDGenerator.getUUID());
  json を返します。
 }
/**
 * ファイルファイルを削除する */
@RequestMapping("/edit/deleteData/{id}")
@レスポンス本文
@Transactional(ロールバックFor = Exception.class)
public AjaxResult deleteData(@PathVariable("id")String id、HttpServletRequest リクエスト) 例外がスローされます{
 文字列キー = request.getParameter("key");
 レコード record = recordService.getById(id);
 文字列 picUrls = record.getPicUrls();
 文字列deleteName = "/" + キー;
 (picUrls.indexOf("^_^" + deleteName) > -1) の場合 {
  picUrls = "^_^" + picUrls.replace(deleteName, "");
 }
 (picUrls.indexOf(deleteName + "^_^") > -1) の場合 {
  picUrls = picUrls.replace(deleteName + "^_^", "");
 }
 picUrls.indexOf(deleteName) > -1 の場合 {
  picUrls = picUrls.replace(deleteName, "");
 }
 レコードを設定します。
 if (recordMapper.updatePicsById(record) == 1) { /** 最初にデータベース内の画像パスを削除し、次に画像が保存されているソースファイルを削除します。 **/
  minioUtil.removeObject(バケット名、キー);
  success(キー)を返します。
 }
 エラーを返します();
}

fileInput ソースコードを変更します。

self._handler($el, 'click', 関数() {
  (!self._validateMinCount())の場合{
   false を返します。
  }
  self.ajaxAborted = false;
  self._raise('filebeforedelete', [vKey, extraData]);
  //検査なし JSUnresolvedVariable、JSHint
  $.modal.confirm("元のファイルを削除してもよろしいですか? 削除後は復元できません",function () { // エコーされた画像を初期化し、削除時に確認するためのプロンプト ボックスをポップアップ表示します。
  if (self.ajaxAborted インスタンスの Promise) {
   self.ajaxAborted.then(関数 (結果) {
    if (!結果) {
     $.ajax(設定);
    }
   });
  } それ以外 {
   もし(!self.ajaxAborted) {
    $.ajax(設定);
   }
  }
  })
 });
});

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Bootstrap Fileinputファイルアップロードコンポーネントの詳細な使用方法
  • JS ファイルアップロードアーティファクトである bootstrap fileinput の詳細な説明
  • Bootstrap ファイル入力ファイルアップロードプレビュープラグインの使用に関する詳細な説明
  • Bootstrap のファイル入力による複数画像のアップロードと編集機能
  • Bootstrapのファイル入力プラグインは複数のファイルのアップロードを実装します
  • Bootstrapfileinputは自動ファイルアップロードを実現します
  • Bootstrap アップロード プラグインの fileinput をベースにして、Ajax 非同期アップロード機能を実現します (複数ファイルのアップロード プレビュー ドラッグをサポート)
  • bootstrap-fileinputファイルアップロード制御の実践演習の詳細説明
  • ブートストラップファイル入力は新しいファイルをアップロードして削除し、サーバーが構成の削除を同期するようにトリガーします。
  • BootStrap fileinput.js ファイルアップロードコンポーネントのサンプルコード

<<:  CentOS での mysql5.7 の詳細なインストールと設定のチュートリアル

>>:  Docker-compose ネットワークの詳細な例

推薦する

Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します

Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...

Linux が Sudo 権限昇格の脆弱性を公開、どのユーザーでも root コマンドを実行可能

Linux で最も一般的に使用される重要なユーティリティの 1 つである Sudo は、ほぼすべての...

SQL 実践演習: オンライン モール データベースの製品カテゴリ データ操作

オンラインショッピングモールデータベース - 商品カテゴリデータ操作(I)プロジェクトの説明電子商取...

収集する価値のあるCSS命名規則(ルール) よく使われるCSS命名規則

CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...

MySQL ページング制限の実用的な最適化

序文クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があり...

JavaScript スクリプトが実行されるタイミングの詳細な説明

JavaScript スクリプトは HTML 内のどこにでも埋め込むことができますが、いつ呼び出され...

CentOS のクローン作成、Linux 仮想マシンの共有の完全な手順

序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...

WeChatアプレットのオーディオコンポーネントがiOSで再生できない問題の解決策

解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...

vueを使用して登録ページの効果を実現し、vueを使用してSMS認証コードログインを実現します

この記事の例では、登録ページの効果を実現するためのVueの具体的なコードを参考までに共有しています。...

フロントエンドの面接でよく聞かれる JavaScript の質問の完全なリスト

目次1. 手書きのインスタンス2.配列のマップメソッドを実装する3. Reduceは配列のmapメソ...

Ubuntu 16.04 カーネルのアップグレード手順

1. 環境仮想マシン上で実行されているUbuntu 16.04では、コマンドuname -rを使用し...

CentOS 7 で rpm パッケージを使用して MySQL 5.7.18 をインストールする

最近、MySQL を使っています。Linux での mysql-installation という記事...

Packetdrillの簡潔なユーザーガイド

1. Packetdrillのコンパイルとインストールソースコードリンク https://githu...

キャンバス操作プラグイン fabric.js の使い方を詳しく解説

Fabric.js は非常に便利なキャンバス操作プラグインです。ここでは、日常のプロジェクトで使用さ...