es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Guardar documento cordova android android ios ionic angular

Estoy intentando usar el plugin cordova-plugin-file para guardar documentos en una carpeta local en el dispositivo. Estoy haciendo lo siguiente:

      await this.file.checkDir(folderPath, directory).then(async res => {
        console.log("checkDir", res);
          await this.file.writeFile(folderPath + directory, fileName, document, options).then(res => {
            console.log("fileName", fileName);
            console.log("document", document);
              response = {
                  ...response,
                  success: true,
                  error: res,
                  data: res
              };
              resolve(response);
              })
              .catch(error => reject(error));
          }).catch(async () => {
              await this.file.createDir(folderPath, directory, true).then(async directory => {
                  await this.file.writeFile(folderPath + directory.name, fileName, document, options).then(res => {
                    console.log("fileName", fileName);
                    console.log("document", document);
                      response = {
                          ...response,
                          success: true,
                          error: res,
                          data: res
                      };
                      resolve(response);
                  }).catch(error => reject(error));
              })
              .catch(error => reject(error));
          });
    });

Siempre obtengo el siguiente error:

FileError: {"code":9,"message":"INVALID_MODIFICATION_ERR"}

Ya intenté agregar esta configuración a config.xml pero no funcionó.

        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
        <application android:requestlegacyexternalstorage="true" android:usescleartexttraffic="true"></application>
    </edit-config>
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error FileError: {"code":9,"message":"INVALID_MODIFICATION_ERR"} generalmente es causado por permisos de archivo incorrectos o al intentar modificar un archivo que está actualmente abierto o en uso. Aquí hay algunas posibles soluciones que puedes probar:

    1. Verificar si el directorio existe: Antes de escribir el archivo, asegúrate de que el directorio exista. Puedes usar el método checkDir() para verificar si el directorio existe y crearlo si no existe. Puedes modificar el fragmento de código de la siguiente manera:
    await this.file.checkDir(folderPath, directory).then(async res => {
    
      // El directorio existe, escribir el archivo.
      await this.file.writeFile(folderPath + directory, fileName, document, options).then(res => {
          console.log("fileName", fileName);
          console.log("document", document);
          response = {
              ...response,
              success: true,
              error: res,
              data: res
          };
          resolve(response);
      }).catch(error => reject(error));
    
    }).catch(async () => {
    
      // El directorio no existe, crearlo y escribir el archivo.
      await this.file.createDir(folderPath, directory, true).then(async directory => {
          await this.file.writeFile(folderPath + directory.name, fileName, document, options).then(res => {
              console.log("fileName", fileName);
              console.log("document", document);
              response = {
                  ...response,
                  success: true,
                  error: res,
                  data: res
              };
              resolve(response);
          }).catch(error => reject(error));
      }).catch(error => reject(error));
    
    });
    
    1. Verificar los permisos de archivo: Asegúrate de que la aplicación tenga los permisos de archivo necesarios para escribir en el almacenamiento local. Puedes agregar los permisos requeridos al archivo AndroidManifest.xml de la siguiente manera:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    
    1. Usa el método requestFileSystem(): Puedes usar el método requestFileSystem() para solicitar acceso temporal o persistente a un sistema de archivos. Este método devuelve un objeto FileSystem que puedes usar para escribir archivos en el almacenamiento local. Puedes modificar el fragmento de código de la siguiente manera:
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, (fs) => {
    
      // Escribe el archivo en la carpeta raíz.
      fs.root.getFile(fileName, { create: true, exclusive: false }, (fileEntry) => {
          fileEntry.createWriter((fileWriter) => {
              fileWriter.write(document);
    
              console.log("fileName", fileName);
              console.log("document", document);
              response = {
                  ...response,
                  success: true,
                  error: null,
                  data: fileEntry.toURL()
              };
              resolve(response);
    
          }, (error) => reject(error));
      }, (error) => reject(error));
    
    }, (error) => reject(error));
    

    Nota: Es posible que debas modificar el código para que se adapte a tu caso de uso específico.

Comments are closed.