có vấn đề sau:làm cách nào để tạo tệp tải lên trong grails hoạt động với oracle?
Tôi đã cố gắng tạo chức năng tải lên tệp simpel trong grails. Tôi vừa tạo một lớp miền với một số điện thoại
byte[] rawFile
làm tài sản. Grails đã làm phần lớn phần còn lại cho tôi. Nó làm việc tốt cho hsqldb tiêu chuẩn trong môi trường dev.
Sau đó, tôi đã triển khai nó lên máy chủ bằng một oracle db được định cấu hình (trình điều khiển mỏng). Mọi thứ nhưng tệp tải lên hoạt động tốt với db oracle. Đối với các tập tin tải lên tôi nhận được một (như xa như tôi có thể nhớ)
SQLException: ORA-01.461: có thể ràng buộc một giá trị DÀI chỉ nhằm chèn vào một DÀI
Tôi đã thử nhiều cách để giải quyết nó (bao gồm một số columnmappings để blobs và sử dụng java.sql.blob thay vì byte []) nhưng không có gì thực sự làm việc và tôi đã đi theo một hướng mà mã của tôi sẽ không được db độc lập nữa.
Google không thực sự giúp tôi và sách grails của tôi cũng không giúp ích gì.
Lưu tệp vào đĩa không phải là giải pháp tốt theo ý kiến của tôi.
Vì vậy, đây là câu hỏi của tôi:
làm thế nào để tạo ra một tập tin tải lên trong grails mà làm việc với oracle?
Cập nhật: có thêm một số thông tin bổ sung. Được quản lý để tái tạo sự cố với XE-Edition của Oracle:
Hibernate tạo cột VARBINARY (255) cho rawFile. Vì vậy, tôi đã cố gắng tải lên một tệp 4 byte và nó hoạt động.
Sau đó tôi đã thay đổi loại cột theo cách thủ công thành 'blob' và nó hoạt động với các tệp lớn hơn.
sau đó tôi đã thêm
static mapping = {
columns {
rawFile type:'blob'
}
}
đến lớp miền của tôi và nó ngừng làm việc:
LỖI errors.GrailsExceptionResolver - [B không thể được đúc để java.sql.Blob java.lang. ClassCastException: [B không thể truyền sang java.sql.Blob
:-(
Tuyệt vời! Có vẻ như đã làm các trick! – rdmueller
Vì vậy, nó không phải là một giải pháp! Tôi đã có loại vấn đề như vậy và nếu tôi không thiết lập các loại lĩnh vực để blob, trong cơ sở dữ liệu oracle loại trường được thiết lập là LONG. Tôi tự hỏi làm thế nào có thể đây là câu trả lời được coi là một trong những giải pháp tốt và tốt. :) – emilan