docs: CachedFileManager and WASM file pickers
This commit is contained in:
Родитель
1673873b97
Коммит
16ece1f716
|
@ -152,26 +152,37 @@ In case the **File System Access API** is not available in the browser, Uno Plat
|
||||||
|
|
||||||
For the upload picker, the browser triggers a file picker dialog and Uno Platform then copies the selected files into temporary storage of the app. The `StorageFile` instance you receive is private for your application and the changes are not reflected in the original file. To save the changes, you need to trigger the "download picker".
|
For the upload picker, the browser triggers a file picker dialog and Uno Platform then copies the selected files into temporary storage of the app. The `StorageFile` instance you receive is private for your application and the changes are not reflected in the original file. To save the changes, you need to trigger the "download picker".
|
||||||
|
|
||||||
For the download picker, the experience requires the use of [`CachedFileManager`](https://docs.microsoft.com/en-us/uwp/api/Windows.Storage.CachedFileManager):
|
For the download picker, the experience requires the use of [`CachedFileManager`](https://docs.microsoft.com/en-us/uwp/api/Windows.Storage.CachedFileManager). Triggering `PickSaveFileAsync` does not actually show the download picker to the user. Instead, only a temporary file is created to allow you to write any content. Afterwards, calling `CompleteUpdatesAsync` opens the download dialog which allows the user to save the file.
|
||||||
|
|
||||||
|
The `CachedFileManager` class works transparently with both the **Download picker** and the **File System Access API**, which means you can write a single snippet of code that handles both scenarios correctly:
|
||||||
|
|
||||||
```c#
|
```c#
|
||||||
var savePicker = new FileSavePicker():
|
var savePicker = new FileSavePicker():
|
||||||
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
|
savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
|
||||||
savePicker.FileTypeChoices.Add("Text file", new List<string>() { ".txt" });
|
savePicker.FileTypeChoices.Add("Text file", new List<string>() { ".txt" });
|
||||||
savePicker.SuggestedFileName = "New Document";
|
savePicker.SuggestedFileName = "New Document";
|
||||||
// for download picker, no dialog is actually triggered here
|
|
||||||
|
// For download picker, no dialog is actually triggered here
|
||||||
// and a temporary file is returned immediately.
|
// and a temporary file is returned immediately.
|
||||||
|
// For Fil System Access API, this triggers the picker to allow
|
||||||
|
// user to select a local file.
|
||||||
var file = await savePicker.PickSaveFileAsync();
|
var file = await savePicker.PickSaveFileAsync();
|
||||||
|
|
||||||
CachedFileManager.DeferUpdates(file);
|
CachedFileManager.DeferUpdates(file);
|
||||||
// write the file
|
|
||||||
|
// Write some content to the file
|
||||||
await FileIO.WriteTextAsync(file, "Hello, world!");
|
await FileIO.WriteTextAsync(file, "Hello, world!");
|
||||||
// this starts the download process of the browser
|
|
||||||
|
// For download picker this starts the download process of the browser
|
||||||
|
// and triggers the save dialog for the user.
|
||||||
|
// For File System Access API, this is a no-op and immediately
|
||||||
|
// completes.
|
||||||
await CachedFileManager.CompleteUpdatesAsync(file);
|
await CachedFileManager.CompleteUpdatesAsync(file);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Checking the source of opened file
|
### Checking the source of opened file
|
||||||
|
|
||||||
To know how the file needs to be handled, you need to check the type of pickers it comes from. To do this, access the `Provider` property of the file:
|
To know how the file needs to be handled, you need to check the type of storage provider it comes from. To do this, access the `Provider` property of the file:
|
||||||
|
|
||||||
```c#
|
```c#
|
||||||
if (file.Provider.Id == "jsfileaccessapi")
|
if (file.Provider.Id == "jsfileaccessapi")
|
||||||
|
|
|
@ -56,3 +56,9 @@ Given than in the project there's the following declaration:
|
||||||
Those methods are not supported yet, however Uno supports to create a `RandomAccessStreamReference` from an `Uri` (`RandomAccessStreamReference.CreateFromUri`), but note that on WASM downloading a file from a random server usually causes some issues with [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS).
|
Those methods are not supported yet, however Uno supports to create a `RandomAccessStreamReference` from an `Uri` (`RandomAccessStreamReference.CreateFromUri`), but note that on WASM downloading a file from a random server usually causes some issues with [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS).
|
||||||
Make sure to configure the server that hosts the file accordingly.
|
Make sure to configure the server that hosts the file accordingly.
|
||||||
|
|
||||||
|
## Support for `CachedFileManager`
|
||||||
|
|
||||||
|
For all targets except WebAssembly, the `CachedFileManager` does not provide any functionality and its methods immediately return. This allows to easily write code which requires deferring updates on UWP and sharing it across all targets.
|
||||||
|
|
||||||
|
In case of WebAssembly, the behavior of `CachedFileManager` depends on whether the app uses the **File System Access API** or **Download picker**. This is described in detail in [file pickers documentation](windows-storage-pickers.md#WebAssembly).
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче