Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để Kiểm tra xem tệp có phải là hình ảnh bằng PL / SQL hay không?

Trong bài đăng trên blog này, tôi đang chia sẻ một chức năng mà bạn có thể kiểm tra xem tệp có phải là tệp hình ảnh hay không bằng cách sử dụng PL / SQL. Chương trình sẽ kiểm tra tệp bằng cách đọc tiêu đề của nó chứ không phải tên phần mở rộng của tệp. Hiện tại, chức năng này có thể xác định ba loại hình ảnh là JPG, PNG và GIF.

PL / SQL Chức năng để kiểm tra xem tệp có phải là tệp hình ảnh hay không

Hàm PL / SQL sau sẽ đọc tiêu đề tệp và sau đó sẽ trả về kiểu ảnh trong kiểu dữ liệu varchar2. Hàm get_image_type nhận hai đối số và chúng như sau:

  1. Đối tượng Thư mục Oracle (as i_dir) Tìm hiểu cách tạo đối tượng thư mục Oracle.
  2. Tên tệp (dưới dạng i_file) tệp phải tồn tại trong thư mục.
CREATE OR REPLACE FUNCTION get_image_type (i_dir    IN VARCHAR2,
                                           i_file   IN VARCHAR2)
   RETURN VARCHAR2
AS
   l_bfile       BFILE;
   l_blob        BLOB;
   l_file_type   VARCHAR2 (50);
BEGIN
   DBMS_LOB.createtemporary (l_blob, FALSE);
   l_bfile := BFILENAME (i_dir, i_file);
   DBMS_LOB.fileopen (l_bfile, DBMS_LOB.file_readonly);
   DBMS_LOB.loadfromfile (l_blob, l_bfile, DBMS_LOB.getlength (l_bfile));
   DBMS_LOB.fileclose (l_bfile);

   IF RAWTOHEX (DBMS_LOB.SUBSTR (l_blob, 8, 1)) = '89504E470D0A1A0A'
   THEN
      l_file_type := 'PNG';
   ELSIF DBMS_LOB.SUBSTR (l_blob, 3, 1) = '474946'
   THEN
      l_file_type := 'GIF';
   ELSIF RAWTOHEX (DBMS_LOB.SUBSTR (l_blob, 3, 1)) = 'FFD8FF'
   THEN
      l_file_type := 'JPG';
   ELSE
      l_file_type := 'The file is not an image.';
   END IF;

   RETURN l_file_type;
EXCEPTION
   WHEN OTHERS
   THEN
      IF DBMS_LOB.fileisopen (l_bfile) = 1
      THEN
         DBMS_LOB.fileclose (l_bfile);
      END IF;

      DBMS_LOB.freetemporary (l_blob);
      RETURN 'The file does not exists.';
END get_image_type;

Kiểm tra

Trong chương trình PL / SQL bên dưới, thay đổi đối tượng thư mục MY_FILES Oracle bằng đối tượng thư mục của bạn và thay đổi tên tệp với tệp có sẵn trong vị trí thư mục MY_FILES.

SET SERVEROUTPUT ON;

DECLARE
   i_image_type   VARCHAR2 (50);
BEGIN
   i_image_type := get_image_type ('MY_FILES', 'oracle-logo-gif-to-use.gif');

   IF i_image_type IN ('JPG', 'GIF', 'PNG')
   THEN
      DBMS_OUTPUT.put_line ('The file is a valid ' || i_image_type || ' image.');
   ELSE
      DBMS_OUTPUT.put_line (i_image_type);
   END IF;
END;
/

Đầu ra

The file is a valid GIF image.
PL/SQL procedure successfully completed.

Xem thêm:

  • Làm cách nào để Chèn tệp trong Bảng Oracle bằng PL / SQL?
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao Oracle hiển thị ??? cho các ký tự đặc biệt như åäö

  2. ORA-28001:Mật khẩu đã hết hạn

  3. Cách tách một chuỗi trong Oracle

  4. Có bao nhiêu chỉ mục cơ sở dữ liệu là quá nhiều?

  5. N phần trăm hàng đầu n%