Hi Chimbu,
  I've not actually tried uploading to the blobstore using C#, but
I've uploaded files to my own handlers.  I'd suggest you use some type
of proxy and watch the requests.  Personally I might upload some small
text file via a browser, then try uploading the same file from the C#
code.  That way you'll be able to compare the requests and hopefully
identify the difference.  Hopefully it will prove to be something
small, like the text encoding or some minor form-encoding issue.


Robert




On Thu, May 19, 2011 at 05:05, Chimbu Aravind <[email protected]> wrote:
> Hi,
>
> Anyone has any clues on this?
>
> Thanks for the help
>
> Chimbu
>
> On May 16, 1:43 pm, Chimbu Aravind <[email protected]> wrote:
>> Hi,
>>
>> Need some help in uploading a file from Widows Mobile 6.5 device to
>> GAE blobstore
>>
>> In the GAE server, I have the following python code; (Its still
>> crude.. )
>>
>> class GetNewUploadUrlHandler(webapp.RequestHandler):
>>     def get(self):
>>         upload_url = blobstore.create_upload_url('/upload')
>>         self.response.headers['Content-Type'] = "text/plain"
>>         self.response.out.write("%s" % upload_url)
>>         logging.info("\n\n from hgetuploadurl - %s",upload_url)
>>
>> class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
>>     def post(self):
>>         upload_files = self.get_uploads('file')
>>         for ufile in upload_files:
>>             blob_info = ufile
>>             logging.info("key = %s",blob_info.key())
>>         #
>>         blob_reader = blobstore.BlobReader(upload_files[0].key())
>>         # Further processing of the file
>>
>> In the device we have some C# code to test the implementation, which
>> uploads a jpg file
>>
>>         private void button1_Click(object sender, EventArgs e)
>>         {
>>             String WebUrl = "http://xxxserver.appspot.com/
>> getnewuploadurl";  //xxx is a dummy name not the real one
>>
>>             HttpWebRequest httpRequest =
>> (HttpWebRequest)HttpWebRequest.Create(WebUrl);
>>             httpRequest.Timeout = 15000;
>>             httpRequest.ReadWriteTimeout = 20000;
>>
>>             using (HttpWebResponse httpResponse =
>> (HttpWebResponse)httpRequest.GetResponse())
>>             {
>>                 Encoding enc = System.Text.Encoding.GetEncoding(1252);
>>                 StreamReader loResponseStream = new
>> StreamReader(httpResponse.GetResponseStream(), enc);
>>                 string Response = loResponseStream.ReadToEnd();
>>
>>                 MessageBox.Show(Response, this.Text,
>> MessageBoxButtons.OK,
>>                    MessageBoxIcon.Hand,
>> MessageBoxDefaultButton.Button1);
>>                 {
>>                     HttpWebRequest req =
>> (HttpWebRequest)WebRequest.Create(Response);
>>                     req.Credentials =
>> CredentialCache.DefaultCredentials;
>>                     string boundary = "frontier";
>>                     req.Method = "POST";
>>
>>                     req.ContentType = string.Format("multipart/form-
>> data; boundary={0}", boundary);
>>
>>                     req.AllowWriteStreamBuffering = true;
>>
>>                     // Retrieve request stream
>>                     Stream reqStream = req.GetRequestStream();
>>
>>                     string imageType = "image/jpeg";
>>                     string fileName = "test.jpg";
>>                     string header = string.Format("--{0}", boundary);
>>                     string footer = string.Format("--{0}--",
>> boundary);
>>                     string NewLine = "\r\n";
>>
>>                     String payload1 = string.Format("{0}{1}Content-
>> Disposition: file; name=\"file\"; filename=\"{2}\"{1}", header,
>> NewLine, fileName);
>>                     String payload2=string.Format("Content-Type: {0}{1}
>> {1}", imageType, NewLine);
>>
>>                     String payload = string.Concat(payload1,
>> payload2);
>>
>>                     byte[] HeadData =
>> Encoding.GetEncoding("utf-8").GetBytes(payload.ToString());
>>
>>                     reqStream.Write(HeadData, 0, HeadData.Length);
>>
>>                     // Open the local file
>>                     String path =
>> System.IO.Path.GetDirectoryName(this.GetType().Assembly.GetModules()
>> [0].FullyQualifiedName) + "\\test.jpg";
>>                     FileStream rdr = new FileStream(path,
>> FileMode.Open);
>>
>>                     // Allocate byte buffer to hold file contents
>>                     byte[] inData = new byte[4096];
>>
>>                     // loop through the local file reading each data
>> block
>>                     //  and writing to the request stream buffer
>>                     int bytesRead = rdr.Read(inData, 0,
>> inData.Length);
>>                     while (bytesRead > 0)
>>                     {
>>                         reqStream.Write(inData, 0, bytesRead);
>>                         bytesRead = rdr.Read(inData, 0,
>> inData.Length);
>>                     }
>>
>>                     byte[] FootData =
>> Encoding.GetEncoding("utf-8").GetBytes(footer.ToString());
>>                     reqStream.Write(FootData, 0, FootData.Length);
>>
>>                     rdr.Close();
>>                     reqStream.Close();
>>
>>                     req.GetResponse();
>>
>>                 };
>>             };
>>         }
>>
>> Problem:
>> When I tested the server and the C# client in the device using the GAE
>> development server; it worked fine.
>> However after I uploaded the server to the Appspot.com,
>> req.GetResponse(); fails with error code 503 (Service not available)
>>
>> Only difference I see between running GAE development server and the
>> Server in appspot.com is the size and structure of the upload url
>> generated by the GAE blobstore
>>
>> eg: with appspot.com url generated 
>> ishttp://xxxserver.appspot.com/_ah/upload/AMmfu6aEjWpmkRhysTsf8LeZPGjOU...
>>
>> Where as with the development server, it is much smaller.
>>
>> in the appspot logs, we dont see any trace of the UploadHandler
>> getting called. We feel, the log URL is somehow gets cut and hence
>> does not get called properly.
>>
>> Any help to solve/debug this will be much appreciated
>>
>> Thanks
>>
>> Chimbu
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google App Engine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/google-appengine?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to