2017-05-31 18 views
5

Code:căn cứ hỏa lực lưu trữ/Bucket upload công với Node.js

var storage = require('@google-cloud/storage'); 
var gcs = storage({ 
    projectId: config.google.projectId, 
    keyFilename: config.google.keyFilenameFirebase 
}); 

var bucket = gcs.bucket('project-id.appspot.com'); 
var destination = 'uploads/12345/full.jpg'; 

bucket.upload(myFile, { public: true, destination: destination }, function(err, file) { 
    if (err) { 
     console.log(err); 
    } 
}); 

tập tin của tôi được tải lên thành công để lưu trữ căn cứ hỏa lực của tôi, nhưng:

  1. Các tập tin tại là công khai truy cập thông qua url: https://storage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg. Tôi có thể sử dụng URL cố định này trong Ứng dụng của mình hoặc có khả năng là URL đó sẽ thay đổi hoặc hết hạn không?
  2. public: true dường như phá vỡ sự lưu trữ UI căn cứ hỏa lực:

enter image description here Các bản xem trước của hình ảnh ở bên phải không được hiển thị và tôi không thể tải hình ảnh thông qua nút download. Ngoài ra, không có url tải (mà tôi không nhớ, vì tôi có thể truy cập nó thông qua liên kết ở trên) và khi nhấp vào "Tạo URL tải mới" căn cứ hỏa lực mang lại

Lỗi URL tạo tải

Khi xóa public: true xem trước được hiển thị chính xác và tôi cũng có thể tạo URL tải xuống. Nhưng url công khai https://storage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg sẽ không hoạt động nữa, điều này là cần thiết đối với tôi.

Vì vậy, kế hoạch của tôi là để dính vào public: true, nhưng nó vẫn còn lỗi tôi, rằng nút xem trước/tải xuống không hoạt động và nó trông giống như một lỗi trong Firebase với tôi. Có ai có thể xác nhận điều đó không?

Trả lời

4

1) Nó sẽ không hết hạn miễn là nó luôn công khai. (Tôi đã thêm một liên kết liên quan đến điều này ở phía dưới)

2) Đây là bản sửa lỗi nhanh. (Bạn có thể làm một trong những điều sau đây)

  • Thêm mình trong mặc định ACL (sau đây là lệnh sử dụng gsutil)

gsutil defacl ch -u your_email @ mail.com: OWNER của chủ sở hữu: // your_bucket;

  • Thêm mình là một quản lý lưu trữ trong Google IAM quản trị giao diện điều khiển

Sau đó tải lên lại tập tin của bạn ....

TL; DR

Dưới đây là lý do tại sao, theo số Firebase Documentation:

Bạn có thể sử dụng API Google Cloud Storage để truy cập các tệp được tải lên qua SDK Firebase cho Lưu trữ đám mây, đặc biệt để thực hiện các hoạt động phức tạp hơn như sao chép hoặc di chuyển tệp hoặc liệt kê tất cả các tệp có sẵn tại tham chiếu.

Điều quan trọng cần lưu ý là các yêu cầu này sử dụng Google Cloud Storage ACL hoặc IAM cấp dự án, thay vì xác thực Firebase và Quy tắc bảo mật bộ nhớ.

Đối với public:true, tôi nghĩ rằng nó sẽ chỉ cho phép và tạo liên kết công khai. Tham khảo here

2

URL của bạn không được thay đổi hoặc hết hạn và chúng sẽ có hiệu lực cho đến khi bị thu hồi, điều này có thể xảy ra thông qua cập nhật đối tượng hoặc thông qua thu hồi url trong bảng điều khiển web firebase. Ít nhất là theo hiểu biết tốt nhất của tôi.

Điều đầu tiên mà tôi nghĩ là: bạn đã định cấu hình CORS trên thùng chưa? Đây có thể là một lý do. Check this out

Điều thứ hai mà tôi có thể nghĩ đến là quy tắc lưu trữ. Nếu bạn có một cái gì đó như allow read: if request.auth.uid == userId;, bạn có thể muốn xóa những tệp đó để làm cho tệp có thể truy cập công khai. Bạn có thể sử dụng một cái gì đó như thế này để làm cho tất cả các file trong một con đường công cộng:

service firebase.storage { 
    match /b/XXXXXX.appspot.com/o { 
    match /{allPaths=**} { 
     allow read; 
    } 
    } 

Nếu bạn đã thực hiện hai điều này, sau đó tiếc là nó thực sự có thể là một lỗi căn cứ hỏa lực quá. May mắn nhất!

+0

Tôi đã liên hệ với nhóm kỹ thuật Firebase. – Chris

Các vấn đề liên quan