محمد صادق شیخ زاهدی
محمد صادق شیخ زاهدی
خواندن ۲ دقیقه·۲ سال پیش

آپلود فایل در سرور با Oracle Apex

سلام :) توی این آموزش میخواهیم فایل ها با استفاده از Oracle Apex درون یک فولدر در سرور آپلود کنیم

قبل از هرچیز نیازه یک دایرکتوری جهت آپلود فایل هامون ایجاد کنیم.

mkdir /u02/uploadFile

خب فولدرو ایجاد کردیم، حال باید یک directory در بانک اطلاعاتیمون ایجاد کنیم

sqlplus create directory upload_image_dir as '/u02/uploadFile';

و به این directory مجوز های لازم رو میدیم

grant read on directory upload_image_dir to anonymous; grant read on directory upload_image_dir to admin;

اوکی بریم سراغ apex، یک صفحه ی جدید ایجاد کنید


خب حالا یک Static Content داخل صفحه قرار میدیم و داخل اون یک آیتم از نوع File Browse که اسم اون رو من P6666-FILE قرار دادم

به بخش Processing برید و یک process جدید ایجاد کنیم جهت آپلود فایل در directory مانند تصویر زیر

کدهای زیر را داخل بخش PL/SQL Code قرار دهید

DECLARE V_IMAGE APEX_APPLICATION_TEMP_FILES.BLOB_CONTENT%TYPE; V_FILENAME APEX_APPLICATION_TEMP_FILES.FILENAME%TYPE; BEGIN BEGIN SELECT BLOB_CONTENT,FILENAME INTO V_IMAGE,V_FILENAME FROM APEX_APPLICATION_TEMP_FILES WHERE UPPER(NAME)=UPPER(:P6666_FILE); EXCEPTION WHEN NO_DATA_FOUND THEN V_IMAGE:=NULL; V_FILENAME:=NULL; WHEN OTHERS THEN V_IMAGE:=NULL; V_FILENAME:=NULL; END; IF V_IMAGE IS NOT NULL AND V_FILENAME IS NOT NULL THEN SAVEFILE(V_IMAGE,'UPLOAD_IMAGE_DIR',V_FILENAME); ELSE APEX_ERROR.ADD_ERROR ( p_message => 'Image Not Upload', p_display_location => apex_error.c_inline_in_notification ); END IF; END;

همانطور که مشاهده میکنید در کد بالا یک پروسیجر صدا زدیم به اسم SaveFile که سه تا ورودی داره

فایل ما از نوع BLOB

دایرکتوری که فایل باید داخل اون آپلود بشه VARCHAR2 (که قبلا اونو به اسم UPLOAD_IMAGE_DIR تعریف کردیم)

اسم فایل VARCHAR2

حال بریم پروسیجر SaveFile درون پایگاه داد جهت ذخیره ی فایل ها درون فولدر ایجاد کنیم.

create or replace PROCEDURE SaveFile( FileContent IN OUT NOCOPY BLOB , FolderName IN VARCHAR2 , FileName IN VARCHAR2) IS BUFFER RAW(1024); OFFSET PLS_INTEGER := 1; FileLength PLS_INTEGER; amount PLS_INTEGER := 1024; fhandle UTL_FILE.FILE_TYPE; BEGIN FileLength := DBMS_LOB.GETLENGTH(FileContent); fhandle := UTL_FILE.FOPEN(FolderName, FileName, 'wb'); LOOP EXIT WHEN OFFSET > FileLength; DBMS_LOB.READ(FileContent, amount, OFFSET, BUFFER); UTL_FILE.PUT_RAW(fhandle, BUFFER, TRUE); OFFSET := OFFSET + amount; END LOOP; UTL_FILE.FCLOSE (fhandle); EXCEPTION WHEN OTHERS THEN IF UTL_FILE.IS_OPEN(fhandle) THEN UTL_FILE.FCLOSE(fhandle); END IF; RAISE; END SaveFile;

فقط یک نکته کوچیک باقی مونده اونم اینه یک دکمه از نوع Submit قرار بدیم و تمام :)


آپلود فایلoracle
شاید از این پست‌ها خوشتان بیاید