2017-09-11 9 views
0

私はIonic 3で作業しています。私はionicで初心者でしたので、使用したデバイスからドキュメントをアップロードしようとしましたが、ストレージアクセスのアンドロイドの許可がありましたが、 SDカードからファイルにアクセスしたいIonic 3でsdcardファイルにアクセスする方法

import { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams } from 'ionic-angular'; 
import { FileChooser } from '@ionic-native/file-chooser'; 
import { FilePath } from '@ionic-native/file-path'; 
import { File } from '@ionic-native/file'; 
import {Platform} from "ionic-angular"; 
@IonicPage() 
@Component({ 
selector: 'page-document', 
    templateUrl: 'document.html', 
}) 

export class DocumentPage { 
fileChooser: FileChooser; 
filePath: FilePath; 
nativepath: any; 
file: File; 

constructor(public navCtrl: NavController, public navParams: NavParams) { 
this.fileChooser= new FileChooser(); 
this.filePath= new FilePath(); 
this.file=new File(); 
} 

ionViewDidLoad() { 
    console.log('ionViewDidLoad DocumentPage'); 
} 

openFile(){ 
this.fileChooser.open() 
.then(uri => this.convertFilePath(uri)) 
.catch(e => alert(e)); 
} 

convertFilePath(filePathUri: string){ 
this.filePath.resolveNativePath(filePathUri) 
.then(filePath =>{ 
    this.nativepath= filePath; 
    //Here in nativepath we get filepath 
}) 
.catch(err => alert("filePath "+err)); 
} 

}


上記のコード: ここでは以下の私のコードは、私がユーザーから、私は、ファイルにアクセスする場合について許可を付与ところ、上記のコードがある

import { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams } from 'ionic-angular'; 
import { RemoteServiceProvider} from "../../providers/remote-service/remote-service"; 
import { AndroidPermissions } from '@ionic-native/android-permissions'; 

@IonicPage() 
@Component({ 
selector: 'page-home', 
templateUrl: 'home.html', 
}) 
export class HomePage { 

android: AndroidPermissions; 
constructor(public remoteServiceProvider: RemoteServiceProvider, public 
navParams: NavParams, public nvCtr: NavController) { 
//this.getStates(); 
this.android= new AndroidPermissions(); 
this.android.requestPermissions([this.android.PERMISSION.READ_EXTERNAL_STORAGE,this.android.PERMISSION.WRITE_EXTERNAL_STORAGE]) 


    } 

    getStates(){ 
this.remoteServiceProvider.getResult().subscribe(data => { 
    alert(data._body); 
},error => { 
    alert(error); 
}); 

} 
ionViewDidLoad() { 
    console.log('ionViewDidLoad HomePage'); 

} 

} 

です私はどこからファイルにアクセスするのかをユーザとその下のユーザに許可します:

openFile(){ 
    this.fileChooser.open() 
    .then(uri => this.convertFilePath(uri)) 
    .catch(e => alert(e)); 
} 

convertFilePath(filePathUri: string){ 
this.filePath.resolveNativePath(filePathUri) 
.then(filePath =>{ 
    this.nativepath= filePath; 
    //Here in navtivepath i get the file path 
}) 
.catch(err => alert("filePath "+err)); 
} 
+0

コンソールにエラーがありますか? – Sampath

+0

エラーはありません。 –

答えて

0

Native plugin fileを使って簡単に行うことができます。

このプラグインは、デバイスに存在するファイル に読み取り/書き込みアクセスを許可するFile APIを実装しています。

Fileクラスは、ファイル とディレクトリにアクセスするための静的な簡易関数を実装します。

ionic cordova plugin add cordova-plugin-file 
npm install --save @ionic-native/file 

あなたは、Android上でそのためexternalRootDirectoryインスタンスのメンバを使用する必要があります。

Android:外部ストレージ(SDカード)のルート。

Git repo hereを参照してください。

+0

こんにちは、 ありがとうございます。 ファイルを読み取るコードがありますが、ファイルにアクセスできません。 私はストレージの許可を与えることができますが、それでもsdcardファイルへのアクセスはありません。 –

+0

そのコードを表示できますか?あなたは別の何かを見せなかった? のOpenFile(){ this.fileChooser.open() .then(URI => this.convertFilePath(URI)) :私はファイルにアクセスここで、iは、ユーザから、以下の権限を付与する場合 – Sampath

+0

上記のコードです。 catch(e => alert(e)); } convertFilePath(filePathUri:列){ this.filePath.resolveNativePath(filePathUri) .then(filePathに=> { this.nativepath = filePathに、 //ここnavtivepath Iにおいて取得ファイルパス }) .catch(err => alert( "filePath" + err)); } –

0

これが役立つことがあります。

import { File } from "@ionic-native/file"; 
import { Diagnostic } from "@ionic-native/diagnostic"; 

constructor(
    ... 
    public file: File, 
    public diagnostic: Diagnostic 
){ 

this.diagnostic.getExternalSdCardDetails() 
.then((data) => { 
    this.jcError += "\n" + "sd:" + JSON.stringify(data); 
    this.jcError += "\n" + "Number cards: " + data.length; 
    for(let ii = 0; ii < data.length; ii += 1){ 
    let thisElem = data[ii]; 
    if(thisElem.type.toLowerCase() === "application" && thisElem.canWrite){ 
     this.ourSDentry = thisElem; 
     basePathSD = thisElem.filePath; 
     break; 
    } 
    } 
    if(!basePathSD){ 
    this.jcError += "\n\n" + "no SD card found"; 
    return; 
    } 
}, (errData)=>{ 
    tag = "getExternalSdCardDetails"; 
    this.jcError += "\n\n" + tag + ":ERR:" + JSON.stringify(errData); 
}); 

あなたはその後、SDカードにアクセスするためにbasePathSDを使用することができます。

関連する問題