none
Como puedo mandar un documento .txt a una API RRS feed

  • Pregunta

  • Hola, estoy tratando de mandar un documento file de formato .txt que tengo almacenado en mi disco D en una carpeta llamada SENDSUNAT pero cuando lo hago con esos códigos que les dejo abajo, no logro que lo lleve ¿alguien sabe porqué?


    static async Task<string> GetRequest(string token, string apiBaseUri, string requestPath)
            {
                using (var client = new HttpClient())
                {
                    //SETUP CLIENTE
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
    
                    //var cont = new MultipartFormDataContent();
                    //cont.Add(new StreamContent(new MemoryStream()), "file", tempurl);
    
                    //var cont = new MultipartFormDataContent();
                    //var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(tempurl));
                    //cont.Add(fileContent);
    
                    //var cont = new ByteArrayContent(System.IO.File.ReadAllBytes(tempurl));
                    //Stream fileStream = System.IO.File.OpenRead("D:\\SENDSUNAT\\" + tempurl2);
    
                    //var cont = new MultipartFormDataContent();
                    //cont.Add(new ByteArrayContent(File.ReadAllBytes(tempurl)));
    
                    //var cont = new MultipartFormDataContent();
    
                    var method = new MultipartFormDataContent();
                    const string fileName = "D:\\SENDSUNAT\\doc.txt";
                    var streamContent = new StreamContent(File.Open(fileName, FileMode.Open));
                    method.Add(streamContent, "file");
    
                    //HACER EL REQUEST
                    HttpResponseMessage response = await client.PostAsync("https://ose-gw1.efact.pe:443/api-efact-ose/v1/document", method);
                    var responseString = await response.Content.ReadAsStringAsync();
                    return responseString;
                }
            }


    lunes, 23 de julio de 2018 18:00

Todas las respuestas

  • hola

    pero cuando lo hago con esos códigos que les dejo abajo, no logro que lo lleve

    no intentaste primero hacelor usando PostMan ? con este podrias probar como debes enviar el archivo

    si esto funciona despues peudes ver como reporducirlo en codigo, pero primero debes ver que el servicio funcione

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de julio de 2018 18:25
  • Claro lo hice con el POSTMAN y me sale todo correcto cuando hago la prueba desde allí pero lo quiero hacer es un ejecutable que lo haga directo el C# para no tener que hacer esos pasos... Ahora estoy atorado en eso de mandar el file.
    lunes, 23 de julio de 2018 18:27
  • el parametro del servicio que recibe el file se llama "file" ?

    method.Add(streamContent, "file");

    porque veo que le pones ese nombre

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de julio de 2018 18:33
  • Lo tengo de esa manera, es formato file para mandar el archivo pero mi archivo que esta en mi D esta en una carpeta llamada SENDSUNAT y adentro esta mi txt llamado doc.txt. Esa linea solo es un código que estaba tomando de otras páginas...

    lunes, 23 de julio de 2018 21:07
  • hola

    >>pero mi archivo que esta en mi D esta en una carpeta llamada SENDSUNAT y adentro esta mi txt llamado doc.txt

    donde este el archivo no afecta en nada, porque en el request envias el byte array

    Sending Image Data with parameter using HttpClient Post

    analiza el ultimo ejemplo, podrias usar

    File.ReadallBytes()

    para obtener el byte array y usar el

    var imageBinaryContent = new ByteArrayContent(fileBytes);

    en tu caso no es imagen, pero aplica de la mis a forma, quizas tenga problemas con el stream

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 23 de julio de 2018 21:18
  • Que tal si lo hago con esto, bueno aunque lo probe pero no me logro salir, el ejemplo que me diste como que no lo entiendo muy bien...

    static async Task<string> GetRequest(string token, string apiBaseUri, string requestPath)
            {
                using (var client = new HttpClient())
                {
                    //SETUP CLIENTE
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
    
                    var method = new MultipartFormDataContent();
                    cont.Add(new StreamContent(new MemoryStream()), "file", tempurl);
    
                    //HACER EL REQUEST
                    HttpResponseMessage response = await client.PostAsync("https://ose-gw1.efact.pe:443/api-efact-ose/v1/document", method);
                    var responseString = await response.Content.ReadAsStringAsync();
                    return responseString;
                }
            }

    lunes, 23 de julio de 2018 22:13
  • Le aplique este código pero me sale error 412 en el responde...
    var method = new MultipartFormDataContent();
                    var streamContent = new StreamContent(File.Open(tempurl, FileMode.Open));
                    method.Add(streamContent, "file", "doc.txt");
    
                    //HACER EL REQUEST
                    HttpResponseMessage response = await client.PostAsync("https://ose-gw1.efact.pe:443/api-efact-ose/v1/document", method);
                    var responseString = await response.Content.ReadAsStringAsync();
                    return responseString;

    lunes, 23 de julio de 2018 22:19
  • Que es tempurl ? no funciona el File.Open() si el archivo esta en al web, para eso se descarga local con el WebClient

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 23 de julio de 2018 22:59
  • El tempurl es la URL donde esta mi archivo txt, mejor te dejo el código completo para que te des cuenta.

    class Program { //VARIABLES const string userName = "mi usuario"; const string password = "mi clave"; const string apiBaseUri = "https://ose-gw1.efact.pe:443"; const string apiGetPeoplePath = "/api-efact-ose/oauth"; const string authorization = "Y2xpZW50OnNlY3JldA=="; const string tempurl = @"D:\\SENDSUNAT\\doc.txt"; const string tempurl2 = "doc.txt"; static void Main(string[] args) { //OBTENER EL TOKEN var token = GetAPIToken(userName, password, apiBaseUri).Result; Console.WriteLine("---------------------------------------TOKEN---------------------------------------"); Console.WriteLine("Token: {0}", token); Console.WriteLine("-----------------------------------------------------------------------------------"); //HACER EL LLAMADO var response = GetRequest(token, apiBaseUri, apiGetPeoplePath).Result; Console.WriteLine("response: {0}", response); //ESPERAR LA CLAVE Console.ReadKey(); } private static async Task<string> GetAPIToken(string userName, string password, string apiBaseUri) { using (var client = new HttpClient()) { //SETUP CLIENTE client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authorization); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //SETUP LOGIN DATA var formContent = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "password"), new KeyValuePair<string, string>("username", userName), new KeyValuePair<string, string>("password", password), }); //ENVIAR REQUEST HttpResponseMessage response = await client.PostAsync("https://ose-gw1.efact.pe:443/api-efact-ose/oauth/token", formContent); //OBTENER EL ACCESO TOKEN DEL RESPONSE BODY var responseJson = await response.Content.ReadAsStringAsync(); var jObject = JObject.Parse(responseJson); return jObject.GetValue("access_token").ToString(); } } static async Task<string> GetRequest(string token, string apiBaseUri, string requestPath) { using (var client = new HttpClient()) { //SETUP CLIENTE client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); //var cont = new MultipartFormDataContent(); //cont.Add(new StreamContent(new MemoryStream()), "file", tempurl); //var cont = new MultipartFormDataContent(); //var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(tempurl)); //cont.Add(fileContent); //var cont = new ByteArrayContent(System.IO.File.ReadAllBytes(tempurl)); //Stream fileStream = System.IO.File.OpenRead("D:\\SENDSUNAT\\" + tempurl2); //var cont = new MultipartFormDataContent(); //cont.Add(new ByteArrayContent(File.ReadAllBytes(tempurl))); //var cont = new MultipartFormDataContent(); //var method = new MultipartFormDataContent(); //var streamContent = new StreamContent(File.Open(tempurl, FileMode.Open)); //method.Add(streamContent, "file", "doc.txt"); var method = new MultipartFormDataContent(); method.Add(new StreamContent(new MemoryStream()), "", ""); //HACER EL REQUEST HttpResponseMessage response = await client.PostAsync("https://ose-gw1.efact.pe:443/api-efact-ose/v1/document", method); var responseString = await response.Content.ReadAsStringAsync(); return responseString; } }


    martes, 24 de julio de 2018 0:07
  • Estimado, encontraste solución al error 412? tengo la misma situación.
    miércoles, 31 de octubre de 2018 14:22