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.
