Causato da: java.lang.IllegalStateException: Deve essere chiamato da una richiesta di upload di richiamata blob . a com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads (BlobstoreServiceImpl.java:169)
Codice
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);
possibile Soluzione (ma quello che non voglio
Primo. Non voglio chiamare un secondo HttpServlet.
Secondo. Per quanto riguarda a questo post c'è la soluzione di scrivere manualmente il 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 dice il seguente:
Deprecated: La funzione File API utilizzata qui per scrivere file su Blobstore verrà rimosso in futuro, a favore di di scrivere file su Google Cloud Storage e utilizzare Blobstore per servire .
possibile Solution2 (ma solo un concetto per una soluzione)
http://www.cloudave.com/1055/the-new-google-app-engine-blobstore-api-first-thoughts/
Bret Slatkin osserva che quando l'API produce l'URL posto da utilizzato per il caricamento dei file, crea un URL univoco univoco che consente di mitigare qualsiasi potenziale sniffing.
Questo si adatta perfettamente allo scenario quando si esegue il rendering di un modulo Web da inviare dall'utente. Ma rende le cose più difficili se si sta cercando di fornire un'API REST che consenta il caricamento di file (si pensi a qualcosa come TwitPic, ad esempio) . In questo caso si dovrà scrivere il proprio render che simula ciò che un modulo web farebbe (ottenere i file , creare URL POST casuale, lo chiamano, ...)
Domanda
Qual è il mio approccio migliore per memorizzare le immagini nel motore dell'app google? C'è un modo migliore rispetto al blobstore? Come posso archiviare le immagini nel blobstore?
Hai dimenticato parte del codice. Dove stai chiamando blobstoreService.createUploadUrl (percorso) Se non stai chiamando quella funzione, questo è il problema. – tkaitchuck
@tkaitchuck Ho provato a chiamarlo prima di 'blobstoreService.getUploads'. Ma questo non ha cambiato nulla nel comportamento –