2014-03-29 81 views
1

我試圖從Android上傳圖像到blobstore,但是當我的服務器servlet在完成時被調用時,Blobstore無法切換任何BlobKeys。當我檢查實際的blobstore時,沒有圖像上傳。沒有錯誤代碼,沒有警告,沒有錯誤,什麼都沒有。現在我知道服務器的東西工作,因爲上傳在iOS中工作。 Android代碼在本地開發服務器上工作得很好,但它不適用於生產環境。我希望有人可以在我的代碼中發現錯誤。對Google App Engine沒有反應Java Blobstore從Android上傳

在此先感謝。

HttpURLConnection connection = null; 

    try { 

     Log.d(LOG_TAG, "Starting multipart POST request to: " +fullUrlValue); 

     URL fullUrl = new URL(fullUrlValue); 

     //make server call 
     connection = getClient().getConnection(fullUrl, RequestMethod.POST); 
     connection.setConnectTimeout(60000); //60 seconds to complete an upload 
     connection.setUseCaches(false); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 

     //see if we are streaming the upload 
     if(requestOptions == null || requestOptions.isChunckedStreamingMode()) 
     { 
      connection.setChunkedStreamingMode(2048); 
     } 

     String boundry = "z6fQbdm2TTgLwPQj9u1HjAM25z9AJuGSx7WG9dnD"; 

     connection.setRequestProperty("Connection", "Keep-Alive"); 
     connection.setRequestProperty("Cache-Control", "no-cache"); 
     connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundry); 

     //attach post objects 
     DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); 

     //add form fields 
     if(additionalParameters != null && additionalParameters.keySet().size() > 0) 
     { 
      Iterator<String> it = additionalParameters.keySet().iterator(); 
      while(it.hasNext()) 
      { 
       String fieldName = it.next(); 
       if(fieldName != null) 
       { 
        String value = additionalParameters.get(fieldName); 
        if(value != null) 
        { 
         //add form field to upload form 
         outputStream.writeBytes("--" + boundry + "\r\n" + "Content-Disposition: form-data; name=\"" + fieldName + "\"\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\n"+value+"\r\n"); 
        } 
       } 
      } 
     } 

     //attach file 
     if(postObjectBytes != null) 
     { 
      //build the request body 
      outputStream.writeBytes("--" + boundry + "\r\n" + "Content-Disposition: form-data; name=\"" + formElementName + "\";filename=\"" + fileName + "\"\r\n\r\n"); 


      //object upload content size 
      long totalUploadSize = postObjectBytes.length; 

      //we have to manually process the stream in order to correctly update the progress listener 
      byte[] buffer = new byte[2048]; 
      long totalBytes = 0; 
      int bytesRead = 0; 

      InputStream inputStream = new ByteArrayInputStream(postObjectBytes); 

      while ((bytesRead = inputStream.read(buffer)) > -1) { 
       totalBytes += bytesRead; 
       outputStream.write(buffer, 0, bytesRead); 

       if(progressListener != null){ 
        progressListener.transferred(totalBytes, totalUploadSize); 
       } 
      } 

      outputStream.writeBytes("\r\n--" + boundry + "--\r\n"); 

     } 

     outputStream.flush(); 
     outputStream.close(); 

回答

相關問題