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 ネットワークの詳細な例

推薦する

Vant Uploaderは1枚以上の写真をアップロードするコンポーネントを実装します

この記事では、1枚以上の写真をアップロードするためのVant Uploaderコンポーネントを紹介し...

CSSはメッセージパネルをスライドするWebコンポーネント機能を実装します

みなさんこんにちは。私と同じように混乱している方はいらっしゃいませんか。CSS は簡単に始められます...

純粋な HTML タグにどれくらい精通していますか?

以下の HTML タグには、基本的に既存のタグがすべて含まれています。数分かけて 1 つずつ参照する...

MySQL 5.7.21 解凍版のインストールと設定方法のグラフィックチュートリアル (win10)

MySQL 5.7.21 解凍版のインストールと設定方法は参考までに。具体的な内容は以下のとおりで...

mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例

例: mysqldump –all-databases を使用すると、すべてのライブラリがエクスポー...

vue フロントエンド HbuliderEslint リアルタイム検証 自動修復設定

目次HBuilderX での ESLint プラグインのインストールカスタム eslint-js ル...

ウェブサイトのコンテンツの一部を傍受するための iframe を実装するためのアイデアとコード

コードをコピーコードは次のとおりです。 <div スタイル="幅:630px;高さ:...

実務経験7年のフロントエンドスーパーバイザーによる経験共有

今日はベテランの貴重な経験を共有します。著者は技術管理の経験が7年あり、多い時は80人以上を率いてい...

JS でシングルトン モードを実装するための 6 つのソリューションの概要

序文今日は、デザインパターンのクリエーションパターンを見直していたところ、JS でシングルトンパター...

Ubuntu での Subversion (SVN) の詳細なインストールと設定

ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...

MySQL トランザクションの概念と使用法の詳細な説明

目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

Vite2+Vue3を使用してMarkdownドキュメントをレンダリングする練習

目次カスタム Vite プラグインvite-plugin-markdownの使用Front Matt...

Vueフィルターの詳細な説明

<本文> <div id="ルート"> <h2&...

複数の条件を持つ MySQL クエリ メソッド

複数の条件を持つ MySQL クエリ環境: MySQL 5.7 where ステートメントに複数の ...