LỗiGoogle App Engine Blobstore và Restlet - "Phải được gọi từ một yêu cầu gọi lại blob upload"
Nguyên nhân: java.lang.IllegalStateException: Phải được gọi từ một yêu cầu upload callback blob . tại com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads (BlobstoreServiceImpl.java:169)
Mã
public class UserUploadProfilePictureResource extends ServerResource {
@Post
public void handleBlobstoreUpload(Representation entity) {
Representation rep =null;
if (entity !=null) {
if (MediaType.MULTIPART_FORM_DATA.equals(entity.getMediaType(), true)) {
Request restletRequest = getRequest();
HttpServletRequest servletRequest = ServletUtils.getRequest(restletRequest);
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(servletRequest);
thể Solution (nhưng những gì tôi không muốn)
Đầu tiên. Tôi không muốn gọi một HttpServlet thứ hai.
Thứ hai. Liên quan đến bài viết này có giải pháp cho viết bằng tay các file:
- how to get uploaded file as blobs in servlet using google app engine
- Upload an image to google app engine blobstore with java programmatically
Google cho biết như sau:
được tán thành: Chức năng những file API được sử dụng ở đây để ghi tệp vào Blobstore sẽ bị xóa vào một thời điểm nào đó trong tương lai, ủng hộ ghi tệp vào Google Cloud Storage và sử dụng Blobstore để phân phát chúng.
thể Solution2 (nhưng chỉ có một khái niệm cho một workaround)
http://www.cloudave.com/1055/the-new-google-app-engine-blobstore-api-first-thoughts/
Bret Slatkin lưu ý rằng khi API sản xuất URL POST được sử dụng để tải lên các tập tin, nó tạo một URL một lần duy nhất mà làm giảm thiểu mọi khả năng đánh hơi.
Điều này phù hợp hoàn hảo cho trường hợp khi bạn đang hiển thị biểu mẫu web do người dùng gửi. Tuy nhiên, điều này làm cho mọi thứ trở nên khó khăn hơn nếu bạn đang cố gắng cung cấp API REST cho phép tải lên tệp (ví dụ: ví dụ: ví dụ như TwitPic). Trong trường hợp này bạn sẽ phải viết của riêng bạn và việc này là mô phỏng những gì một hình thức web sẽ làm gì (có được file, tạo URL POST ngẫu nhiên, gọi nó là, ...)
Câu hỏi
Cách tiếp cận tốt nhất của tôi để lưu trữ hình ảnh trong công cụ ứng dụng của Google là gì? Có cách nào tốt hơn blobstore không? Làm thế nào tôi có thể lưu trữ hình ảnh trong blobstore?
Bạn đã để lại một số mã của mình. Bạn đang gọi blobstoreService.createUploadUrl ở đâu (đường dẫn) Nếu bạn không gọi hàm đó, đó là vấn đề. – tkaitchuck
@tkaitchuck Tôi đã cố gọi nó trước 'blobstoreService.getUploads'. Nhưng điều đó không thay đổi gì trong hành vi –