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

推薦する

Vueは買い物数量を変更できるショッピングカートを実装します

この記事では、Vueを使用してショッピングカートの数量を変更する方法を紹介します。具体的な内容は次の...

pagodaを使用してionCube拡張機能をインストールする方法

1. まずパゴダを設置するインストール要件: Python バージョン: 2.6/2.7 (Pago...

Vue+Element+Springboot画像アップロードの実装例

最近、たまたま vue+springboot のフロントエンドとバックエンドの分離プロジェクトに触れ...

Uniapp は DingTalk スキャンコード ログイン サンプル コードを実装します

UniappにはDingTalk認証ログインがないため、この記事ではDingTalk QRコードログ...

MySQL インデックスが失敗するいくつかの状況の概要

1. インデックスはnull値を保存しないより正確に言うと、単一列インデックスには null 値は格...

WeChat アプレットのカスタム タブバー コンポーネント

この記事では、WeChatアプレットのカスタムタブバーコンポーネントの具体的なコードを参考までに紹介...

MySQL 整合性制約の定義と例のチュートリアル

目次整合性制約整合性制約の定義整合性制約の分類主キー制約単一の主キーと複合主キーの違い主キーフィール...

Axios を使用して Vue2 がリクエストを開始する詳細なプロセス記録

目次序文Axiosのインストールと設定シンプルなGETリクエストを開始するPOSTリクエストを行うシ...

Centos 7 64 ビット デスクトップ バージョンのインストール グラフィック チュートリアル

システムが遅いと感じてソースを変更したい場合は、別の記事で整理しました https://blog.c...

幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...

MySQLインデックスが使用されない状況のまとめ

MySQL のインデックスの種類一般的に、次の 4 つのカテゴリに分類できます。通常のインデックス:...

ダイナミッククロックを実現するJS+CSS

この記事の例では、動的な時計を実装するためのJS + CSSの具体的なコードを参考までに共有していま...

JavaScript タイマー原理の詳細な説明

目次1. setTimeout() タイマー2. setTimeout() タイマーを停止する3. ...

el-select のスタイルを変更する方法の詳細な説明: popper-append-to-body と popper-class

elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...

Typescript+React でモバイルと PC でシンプルなドラッグ アンド ドロップ効果を実現

この記事では、モバイルとPCで簡単なドラッグアンドドロップ効果を実現するためのTypescript ...