That 3rd parameter to update is a mimetype, not an file extension.That's the GDocumntsAllowedType hashmap takes care of :)
try: text/csv Eric On Mon, Jun 15, 2009 at 4:35 PM, harry mendell <harry.mend...@gmail.com>wrote: > Google.GData.Client.GDataRequestException was unhandled > Message="Execution of request failed: > http://docs.google.com/feeds/media/private/full/spreadsheet:rqfFdRlpaWjFOyJ9MrslMjg > " > Source="Google.GData.Client" > ResponseString="Malformed Content-Type" > StackTrace: > at Google.GData.Client.GDataRequest.Execute() > at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter) > at Google.GData.Client.GDataGAuthRequest.Execute() > at Google.GData.Client.Service.StreamSend(Uri targetUri, Stream > inputStream, GDataRequestType type, String contentType, String slugHeader, > String etag, AsyncSendData data) > at Google.GData.Client.Service.StreamSend(Uri targetUri, Stream > inputStream, GDataRequestType type, String contentType, String slugHeader) > at Google.GData.Client.Service.Update(Uri uriTarget, Stream input, > String contentType, String slugHeader) > at myfirstcsharp.Program.Main(String[] args) in C:\Documents and > Settings\harry\My Documents\Visual Studio > 2008\Projects\updatesheet\myfirstcsharp\Program.cs:line 54 > at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] > args) > at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] > args) > at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel) > at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() > at > System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext > activationContext, String[] activationCustomData) > at > System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext > activationContext) > at System.Activator.CreateInstance(ActivationContext > activationContext) > at > Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() > at System.Threading.ThreadHelper.ThreadStart_Context(Object state) > at System.Threading.ExecutionContext.Run(ExecutionContext > executionContext, ContextCallback callback, Object state) > at System.Threading.ThreadHelper.ThreadStart() > InnerException: System.Net.WebException > Message="The remote server returned an error: (400) Bad Request." > Source="System" > StackTrace: > at System.Net.HttpWebRequest.GetResponse() > at Google.GData.Client.GDataRequest.Execute() > InnerException: > > > On Jun 15, 2009, at 6:49 PM, Eric Bidelman wrote: > > Sorry. The definition of GDocumntsAllowedType is in the lib's source: > http://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/src/gdocuments/documentservice.cs#56 > > What is the exception/response from the server? > > Eric > > On Mon, Jun 15, 2009 at 3:37 PM, harry mendell <harry.mend...@gmail.com>wrote: > >> >> Dear Eric, >> I tried adapting your code and wrote a test which I copied below. It >> fails at >> DocumentEntry entry = service.Update(new >> Uri(lastUploadEntry.MediaUri.ToString()), >> stream, "CSV", lastUploadEntry.Title.Text) as DocumentEntry; >> which is almost at the bottom. I think I'm having a some code of >> compatibility issue between the ACL and token auth, but this end of the pool >> is pretty deep. >> Would you mind taking a look? >> Thanks, >> Harry >> >> >> >> >> >> >> using System; >> using System.IO; >> using System.Collections; >> using System.Net; >> using System.Collections.Generic; >> using Google.Spreadsheets; >> using System.Linq; >> using System.Text; >> using Google.GData.Documents; >> using Google.GData.Client; >> using Google.GData.Extensions; >> >> >> >> namespace myfirstcsharp >> { >> >> class Program >> { >> static void Main(string[] args) >> { >> DocumentsService service = new DocumentsService( >> "HBM-DocListUploader-1"); >> ((GDataRequestFactory)service.RequestFactory).KeepAlive = >> false; >> service.setUserCredentials("qvtuat", "qvtqvtqvt"); >> //force the service to authenticate >> DocumentsListQuery query = new DocumentsListQuery(); >> query.NumberToRetrieve = 1; >> service.Query(query); >> >> >> // For testing only. Creates document called radar.csv >> DocumentEntry lastUploadEntry = service.UploadDocument( >> "c:/radar.csv", "radar.csv"); >> // For testing only. Now lets see if we can update it >> FileInfo fileInfo = new FileInfo("c:/radar.csv"); >> FileStream stream = fileInfo.Open(FileMode.Open, FileAccess.Read, >> FileShare.ReadWrite); >> >> try >> { >> /* It didn't recogize GDocumntsAllowedType so I commented >> the check since I know its good type >> // convert the extension to caps and strip the "." off the >> front >> string ext = fileInfo.Extension.ToUpper().Substring(1); >> String contentType = (String)GDocumentsAllowedTypes[ext]; >> >> if (contentType == null) >> { >> throw new ArgumentException("File extension '" + ext + >> "' is not recognized as valid."); >> } >> // Make sure we don't overwrite someone else's changes. >> Use entry's ETag >> */ >> GDataRequestFactory factory = (GDataRequestFactory >> )service.RequestFactory; >> factory.CustomHeaders.Add("If-Match: " + >> lastUploadEntry.Etag); >> service.RequestFactory = factory; >> DocumentEntry entry = service.Update(new >> Uri(lastUploadEntry.MediaUri.ToString()), >> stream, "CSV", lastUploadEntry.Title.Text) as DocumentEntry; >> } >> finally >> { >> stream.Close(); >> } >> } >> } >> } >> >> >> On Jun 11, 2009, at 5:16 PM, Eric (Google) wrote: >> >> >> This worked for me: >> >> DocumentsService service = new DocumentsService("yourCompany-AppName- >> v1"); >> // TODO: Fetch DocumentEntry >> ReplaceDocContents(entryToUpdate, "C:\somewhere\test.doc"); >> ... >> >> static public DocumentEntry ReplaceDocContents(DocumentEntry >> entryToUpdate, string replacementFileName) >> { >> DocumentEntry entry = null; >> >> FileInfo fileInfo = new FileInfo(replacementFileName); >> FileStream stream = fileInfo.Open(FileMode.Open, FileAccess.Read, >> FileShare.ReadWrite); >> >> try >> { >> // convert the extension to caps and strip the "." off the front >> string ext = fileInfo.Extension.ToUpper().Substring(1); >> >> String contentType = (String)GDocumentsAllowedTypes[ext]; >> >> if (contentType == null) >> { >> throw new ArgumentException("File extension '" + ext + >> "' is not recognized as valid."); >> } >> >> // Make sure we don't overwrite someone else's changes. Use >> entry's ETag >> GDataRequestFactory factory = (GDataRequestFactory) >> service.RequestFactory; >> factory.CustomHeaders.Add("If-Match: " + entryToUpdate.Etag); >> service.RequestFactory = factory; >> >> entry = service.Update(new Uri(entryToUpdate.MediaUri.ToString()), >> stream, contentType, >> entryToUpdate.Title.Text) as DocumentEntry; >> } >> finally >> { >> stream.Close(); >> } >> >> return entry; >> } >> >> You may have more luck next time if the post isn't "write my app for >> me". >> >> Eric >> >> On Jun 11, 11:49 am, harry mendell <qvt...@gmail.com> wrote: >> >> I tried .net and first and can upload but not update. At this point I >> >> would be grateful for any solution. I've been at this for over a week >> >> and am ready to put my head through the wall:) >> >> >> PS I am able to do it a cell at a time with the spreadsheet api, but >> >> its slow, and besides I am not going to be able to sleep until I get >> >> this. I haven't felt like such a newbie since I poped out of my >> >> mother. Starting to feel postal. >> >> >> >> >> >> >> > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Docs Data APIs" group. To post to this group, send email to Google-Docs-Data-APIs@googlegroups.com To unsubscribe from this group, send email to google-docs-data-apis+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Docs-Data-APIs?hl=en -~----------~----~----~----~------~----~------~--~---