Menyimpan dan Mengakses Lampiran File dalam Tipe Data BLOB Melalui Oracle APEX
Berikut adalah desain skema untuk tabel yang saya gunakan yang berisi kolom data yang diketik BLOB. Catatan:ini bukan desain dari solusi akhir; ikuti saja perubahan yang terjadi sehingga Anda dapat memahami apa yang saya temukan tentang beberapa batasan dari wizard pembuatan Formulir dan Laporan APEX.
Percobaan Pertama:Menyiapkan Tabel, Formulir, dan Laporan APEX
Tabel:MY_DOC_STACK Percobaan Tata Letak Pertama
Kolom DOC_FILE
adalah tipe BLOB yang menyimpan lampiran dokumen yang sebenarnya. Ini adalah tampilan Formulir dan Laporan yang dibuat menggunakan wizard Aplikasi APEX yang mengarah langsung ke tabel:
MENAMBAHKAN DOKUMEN ke Bidang yang Diketik BLOB
Kueri laporan tampaknya berfungsi seperti yang ditunjukkan di bawah ini:
Berikut adalah daftar catatan lainnya dengan lampiran dokumen:
Contoh Keluaran Laporan Dengan Beberapa Catatan
Masalahnya adalah ketika mencoba mengunduh file yang dimasukkan ke dalam bidang BLOB:
Ini halus dari gambar, tetapi tipe mime yang diidentifikasi:Application/Octet-Stream
adalah indikator bahwa formulir APEX telah kehilangan jejak jenis file (Microsoft Word, docx) yang baru saja saya unggah. File yang disimpan hanyalah sekumpulan karakter sampah. Mencoba mengubah ekstensi file juga tidak membantu.
Upaya Kedua (Revisi):Penyesuaian Desain Aplikasi APEX untuk Penanganan Blob/Dokumen
Meskipun wilayah aplikasi dan komponennya tidak langsung berfungsi setelah wizard selesai, hanya ada beberapa pengeditan kecil untuk membuatnya berfungsi. Pemeriksaan lebih dekat dari elemen formulir PX_DOC_FILE
menunjukkan bahwa elemen formulir BLOB memerlukan beberapa meta-informasi tambahan tentang file yang dilampirkan ke catatan:
Saya melanjutkan dan mendefinisikan kolom tambahan dan menambahkannya ke tabel yang berisi BLOB (MY_DOC_STACK), formulir Apex yang diunggah, dan definisi wilayah laporan.
Perhatikan bahwa nama kolom (untuk kesederhanaan) telah dibuat sama dengan persyaratan elemen formulir Blob DOC_FILE
.
Formulir Apex Lampiran Dokumen yang Direvisi
Saya awalnya berpikir seseorang harus pintar untuk mengantisipasi semua kemungkinan nilai Jenis Mime (msword, pdf, zip, dll.) tetapi itu tidak perlu. Demikian juga untuk bidang lain yang disediakan untuk tipe karakter, dan kolom yang terakhir diperbarui.
Laporan Unggahan Gumpalan Dokumen yang Direvisi
Diskusi Keluaran Laporan yang Direvisi
-
[Pemilik:AUDREY HEPBURN]:Saya memaksa
MIME_TYPE
dengan formulir saya ke "Aplikasi/msword"; meskipun file yang saya unggah adalah jenis ".docx", mengunduhnya kembali melalui halaman Apex menyimpannya ke klien lokal saya sebagai format ".doc" (format MS Word lama). -
[Pemilik:CHEVY CHASE]:Kali ini,
MIME_TYPE
tidak dimasukkan dan proses/tindakan formulir Apex menambahkan ini ke catatan saat dibuat:application/vnd.openxmlformats-officedocument.wordprocessingml.document
Ini mungkin format yang ditunjuk oleh
Microsoft Office 2013
.FILE_NAME
nilai ditentukan pengguna dan ekstensi .docx ditambahkan secara eksplisit. Hasilnya adalah bahwa mengunduh file meminta pengguna secara default membuka file menggunakan aplikasi yang benar di komputer klien saya:MS Word (Versi 2013). -
[Pemilik:CARRIE FISHER]:Sama seperti kasus uji (2) tetapi menggunakan Adobe PDF (Portable Document Format). Perilaku yang sama kecuali
MIME_TYPE
mengidentifikasi dirinya sebagai aplikasi/pdf; file dibuka seperti yang diharapkan.
Diskusi Lebih Lanjut:
Semua masalah ini berasal dari DML API generik yang digunakan Apex untuk mengelola penyisipan, pembaruan, dan penghapusan dari skema aplikasi, kemungkinan besar itu adalah bagian dari penguatan Apex terhadap serangan injeksi SQL. INSERT
direct langsung dan SELECT
pernyataan yang digunakan dalam klien SQL Anda tidak dengan cara yang sama seperti desain formulir default (dari wizard aplikasi) diatur untuk mengelola transaksi DML.
Perhatikan bahwa proses halaman:Process Row of MY_DOC_STACK
terlihat lebih parameter didorong. Jika ada operasi DML di suatu tempat, pertama-tama akan didasarkan pada penyaringan yang cermat dari setiap variabel input yang dikirimkan melalui formulir Apex.
Ada banyak cara lain agar Apex dapat mengelola transaksi DML; ... solusi ini berfokus pada apa yang kemungkinan besar dihadapi oleh OP.
Semoga Sukses!