2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Apexで複数ファイルを一括アップロード

Posted at

はじめに

Apexにのデフォルト機能としてファイルアップロードはありますが、1ファイルずつ登録する仕様となっているため複数ファイルを登録したい場合は少々手間がかかります。そこで、どうにか複数ファイルを一括登録する方法はないのかなぁと探していたところ、こちらのブログ(https://blogs.ontoorsolutions.com/post/upload_multiple_file_in_oracle_apex/ )を見つけました。こちらの記事では、画像ファイルを表示させていますがその部分をDBにInsertするように書き換えることで実装できます。

テーブルを準備

まずは、ファイルを登録するテーブルを作成します。 ```PL/SQL CREATE TABLE SAMPLE_FILES( FILE_ID NUMBER GENERATED ALWAYS AS IDENTITY, FILE_TYPE NUMBER , FILE_NOTE VARCHAR2(256) , FILE_CONTENTS BLOB , FILE_MIMETYPE VARCHAR2(300) , FILE_NAME VARCHAR2(1600) , FILE_CHARSET VARCHAR2(300) , ); ```

表示するページを作成

ファイルを登録するテーブルを表示させるページを作成します。対話グリッドで先ほど作成したSAMPLE_FILESを指定。
image.png image.png image.png image.png image.png
そしてこのまま作成して、ページを開こうとすると問題なく表示できますが、この後ファイルを登録した後にページを表示させようとすると以下のようなエラーになります。 image.png

なので、対話グリッドの列から、FILE_CONTENTすなわちBLOBの列を削除してください。

image.png

アップロードするためのページを作成

一旦、FILE_UPLOADという空白のページを作成しました。 ここにファイルアップロードのアイテムと、登録用ボタン、INSERTプロセスを作成していきます。
まずはファイルアップロードのアイテム。複数ファイルの許可をONにするのを忘れずに。
image.png

次に登録用ボタン。動作は、ページの送信にします。
image.png
image.png

そして、INSERTプロセスを作成します。
image.png
PL/SQLの中身はこんな感じ。

declare
    l_file_names apex_t_varchar2;
    l_file       apex_application_temp_files%rowtype;
begin

  APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION(
	p_collection_name=>'FILES'
  );

    l_file_names := apex_string.split (
                        p_str => :P3_FILE,
                        p_sep => ':' );
    for i in 1 .. l_file_names.count loop
        select *
          into l_file
          from apex_application_temp_files
         where name = l_file_names(i) and APPLICATION_ID=:APP_ID;     

         INSERT INTO SAMPLE_FILES(FILE_CONTENTS, FILE_MIMETYPE, FILE_NAME)
         VALUES(l_file.BLOB_CONTENT, l_file.MIME_TYPE, l_file.FILENAME);

    end loop;
end;

プロセスの後に、元のページに戻るブランチを作成します。
image.png
これで、アップロードするページの作業は以上です。

アップロードするためのページに遷移するボタンを作成

アップロードするためのページに遷移するためのボタンを作成します。
image.png
image.png

実際の動作がこちら

まずはUploadをクリック
image.png
複数ファイルを選択してUpdateをクリック。
image.png

するとこうなる!
image.png

このままだとほんとにDBに登録できてるの??っていう感じなので、ダウンロードも作成していきます。
と思ったが面倒なので、対話モードレポートにしちゃいましょう!
ダウンロードするときに使用するダウンロードという仮想列を作成しておきます。
image.png
image.png

DOWNLOADの列タイプをBLOBのダウンロードにします。(これが対話グリッドにはないのです)
image.png

image.png

そしたら、ダウンロードできるようになりました!
と言いたいところなのですが、エラーが発生しているのでしばしお待ちを。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?