Urlfetch blobs multipart/m

Estoy tratando de usar UlrFetch para enviar datos CSV a los informes de Zoho. Estoy usando el siguiente código:

function doImport(tabla,file) {
  var url="https://reportsapi.zoho.com/api/xxxxxxxx/yyyyyyyyyyy/"+tabla;
  var ticket="zzzzzzzzzzzzzzzz" ;//getTicket();
  url=url + "?ZOHO_ACTION=IMPORT&ZOHO_OUTPUT_FORMAT=XML&ZOHO_ERROR_FORMAT=json&ZOHO_API_VERSION=1.0"
  var params={"ZOHO_API_KEY":"vvvvvvvvvvvvvvvvvvvvvv"
              ,"ticket":ticket
              ,"ZOHO_FILE":file
              ,"ZOHO_IMPORT_TYPE":"APPEND"
              ,"ZOHO_ON_IMPORT_ERROR":"ABORT"
              ,"ZOHO_AUTO_IDENTIFY":"true"
              ,"ZOHO_CREATE_TABLE":"false"
              ,"ZOHO_DATE_FORMAT":"dd-MM-YYYY"
              ,"ZOHO_DELIMITER":"0"
             };

  var options =
    {
      "method" : "post",
      "payload" : params,
      "contentType": "multipart/form-data"
    };
  var response=UrlFetchApp.fetch(url, options);
  var tableDataString=response.getContentText();
  expireTicket(ticket);
  Logger.log(tableDataString);
  return tableDataString;
}

Sin embargo, los datos no se envían en el formato multiforme correcto (obteniendo el estado de error 500). Este problema se remonta a principios de 2011. Por favor, uno o dos ejemplos de cómo enviar archivos blob en formato multipart/form-data serían bienvenidos.

Muchas Gracias

preguntado el 22 de mayo de 12 a las 15:05

UrlFetch ahora puede aceptar un byte[] como valor de carga útil para el objeto del argumento. Blob.getBytes() funciona lo suficiente para eso. En términos de una solicitud de varias partes, según tengo entendido, eso no es binario. Así que no creo que puedas mezclar los dos (en ninguna plataforma) como sugieres. ¿Cuál es la URL de la API con la que intenta interactuar y cómo? -

Gracias por su respuesta. Estoy usando la API descrita en zohoreportsapi.wiki.zoho.com/Importing-CSV-File.html y funciona desde otras plataformas. ¿Tiene un ejemplo de envío de datos de formulario de varias partes? -

2 Respuestas

Para la carga útil, lo está pasando como un Object, que parece correcto. Esto se interpretará como un formulario HTTP (que desea).

Para corregir su secuencia de comandos, intente lo siguiente:

  1. Asegúrese de que el valor que está utilizando para ZOHO_FILE es una gota. Esto asegura que el formulario HTTP se envíe automáticamente con:
    Content-Type: multipart/form-data; boundary=[automatically determined]

  2. No especificar contentType para HTTP POST. Esto permite que UrlFetchApp use automáticamente su propio contentType valor, que incluye el boundary campo. (Detalle menor: está bien especificar el tipo de contenido en el blob en sí, pero no en la solicitud de publicación general. Esto permite especificar el tipo de contenido de cada blob dentro de la publicación, si le interesa).

Respondido el 11 de junio de 12 a las 18:06

UrlFetchApp utilizará la codificación de datos de formulario/multiparte automáticamente si pasa un blob como valor de carga útil. Es posible que necesite usar:

"ZOHO_FILE": file.getBlob()

contestado el 24 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.