Skip to content

Commit

Permalink
[ADD] nvm / app-filesystem
Browse files Browse the repository at this point in the history
  • Loading branch information
O-h-y-o committed Feb 16, 2024
1 parent 22c4263 commit b781697
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/ko/posts/info/nvm.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# nvm 설치하기

node 버전 관리를 편리하게 해주는 nvm 설치법입니다.

[https://github.com/coreybutler/nvm-windows/releases](https://github.com/coreybutler/nvm-windows/releases)

해당 사이트에서 최신 버전을 다운로드 후 설치해주세요.

<br/> <br/>

원하는 node version 다운로드 및 적용

```shell
$ nvm install <node_version>
$ nvm use <node_version>
```

설치된 node version 및 현재 사용중인 버전 확인

```shell
$ nvm ls
```
93 changes: 93 additions & 0 deletions src/ko/posts/vue3+quasar/app-filesystem.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# App Filesystem 접근

App에서 Filesystem에 접근하는 방법입니다.

### IOS 세팅

`UIFileSharingEnabled` 값을 추가 후 `YES` 로 변경해주세요.
`LSSupportsOpeningDocumentsInPlace` 값을 추가 후 `YES` 로 변경해주세요.

### Android 세팅

다음 문구를 추가해주세요.

```xml
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```

### 플러그인 설치

`yarn add @capacitor/filesystem` 설치 후 `npx cap sync` 명령어로 최신화시켜주세요.

### 전체 코드

```ts
import { Directory, Filesystem } from "@capacitor/filesystem";

export const downloadFile = async (data: {
url: string;
fileName: string;
notFile?: boolean;
}): Promise<boolean> => {
try {
if (Platform.is.capacitor) {
const permission = await Filesystem.checkPermissions();

if (permission.publicStorage === "prompt") {
const requestPermission = await Filesystem.requestPermissions();

if (requestPermission.publicStorage === "granted") {
// 권한 허용
} else {
// 거절 문구 => 권한 허용을 거절하실 경우 다운로드가 불가능합니다.
}
} else if (permission.publicStorage === "granted") {
try {
const dirLength = (
await Filesystem.readdir({
path: PATH, // e.g. ""
directory: Directory.Documents,
})
).files.length;

if (data.notFile) {
await Filesystem.writeFile({
data: data.url,
path: PATH, // e.g. `${img_${NUMBER}}`
directory: Directory.Documents,
});
} else {
await Filesystem.downloadFile({
url: data.url,
path: PATH, // e.g. `${img_${NUMBER}}`
directory: Directory.Documents,
});
}
} catch (ex) {
// 실패 문구
}
} else if (permission.publicStorage === "denied") {
// 거절 상황 => 앱 설정에 들어가 파일 권한을 허용해주세요. 등의 문구
}
} else {
const downloadTag = document.createElement("a");

downloadTag.href = data.url;

downloadTag.download = "image";

downloadTag.click();

downloadTag.parentNode?.removeChild(downloadTag);
}
} catch (ex) {
console.error(ex);
} finally {
return false;
}
};
```

모바일 웹에서도 다운로드가 가능해야하니, capacitor로 접속했을때와 분기를 나누었습니다.

0 comments on commit b781697

Please sign in to comment.