javascript - specification - whatwg html



Speichern Sie Datei mit Binär String auf Android über HTML5 (1)

Ich arbeite auch mit einem kleinen 3-Mann-Team mit meiner App und wir stecken fest.

Wir verwenden JSZip und FileSaver , um Dateien für unsere Code-Editor-Anwendung zu speichern. Es funktioniert gut im Browser, aber wenn ich es mit PhoneGap als native Android-Anwendung verwende, schreibt es nicht.

Dieses Problem tritt weiterhin bei der Bibliothek zip.js auf und speichert sogar einzelne Dateien mit der FileSaver.js- Bibliothek.

$('.savemd').click ->
  blob = new Blob([ mdEditor.getValue() ], type: 'text/x-markdown')
  saveAs blob, 'source.md'

Ich habe versucht, das FileWriter- Objekt von PhoneGap zu verwenden , aber später stellte ich fest, dass es momentan unmöglich ist, binäre Daten mit Phonegap's FileWriter- Quelle zu schreiben

Dieser Beitrag ist jedoch ein paar Jahre alt.

Ich habe auch versucht, dies mit nativem WebView zu arbeiten und das Crosswalk-Projekt zu verwenden und immer noch kein Glück.

Wir haben es auch versucht ...

function saveFile(fileName, fileData) {
  // Get access to the file system
  window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) {
    // Create the file.
    fileSystem.root.getFile(fileName, { create: true, exclusive: false }, function (entry) {
      // After you save the file, you can access it with this URL
      myFileUrl = entry.toURL()
      entry.createWriter(function(writer) {
        writer.onwriteend = function(evt) {
          alert("Successfully saved file to " + myFileUrl)
        }
        // Write to the file
        writer.write(fileData)
      }, function(error) {
        alert("Error: Could not create file writer, " + error.code)
      })
    }, function(error) {
      alert("Error: Could not create file, " + error.code)
    })
  }, function(evt) {
    alert("Error: Could not access file system, " + evt.target.error.code)
  })
}

Das Problem dabei ist, dass es nur dem Benutzer Speicher (SD-Karte in oder nicht, wir haben auf allen unseren Android-Geräten getestet und immer noch nicht funktioniert, aber beachten Sie, dass wir keine gerooteten Geräte verwenden) spart, und wird es nicht arbeite mit JSZip.

Unser Team entwickelt auf vielen verschiedenen Betriebssystemen (Mac, Android, Chromebook), so dass PhoneGap Build derzeit eine Voraussetzung ist.

Kennt jemand eine Möglichkeit, dies zu tun?
Dies bezieht sich auf das Speichern einer Datei mit einem binären String auf Android über HTML5? (PhoneGap oder PhoneGap Builds Antwort wird sehr bevorzugt)

Hier ist unser aktuelles XML für PhoneGap Build:

<?xml version="1.0" encoding="utf-8"?>
<widget xmlns = "http://www.w3.org/ns/widgets"
  xmlns:gap   = "http://phonegap.com/ns/1.0"
  id          = "com.save.test"
  version     = "1.0.0"
  versionCode = "1">
  <name>SaveTest</name>
  <description>
      Save file using a Binary string test on Android
  </description>
  <author email="[email protected]" href="http://mikethedj4.github.io/">
      Michael Schwartz
  </author>

  <content src="index.html" />

  <icon src="icon.png" gap:role="default" />
  <icon gap:platform="android" gap:qualifier="ldpi" src="res/icon/android/icon-36-ldpi.png" />
  <icon gap:platform="android" gap:qualifier="mdpi" src="res/icon/android/icon-48-mdpi.png" />
  <icon gap:platform="android" gap:qualifier="hdpi" src="res/icon/android/icon-72-hdpi.png" />
  <icon gap:platform="android" gap:qualifier="xhdpi" src="res/icon/android/icon-96-xhdpi.png" />
  <icon gap:platform="android" src="res/icon/android/icon-96-xhdpi.png" />
  <icon gap:platform="ios" height="57" src="res/icon/ios/icon-57.png" width="57" />
  <icon gap:platform="ios" height="72" src="res/icon/ios/icon-72.png" width="72" />
  <icon gap:platform="ios" height="114" src="res/icon/ios/icon-57-2x.png" width="114" />
  <icon gap:platform="ios" height="144" src="res/icon/ios/icon-72-2x.png" width="144" />
  <icon gap:platform="winphone" src="res/icon/windows-phone/icon-48.png" />
  <icon gap:platform="winphone" gap:role="background" src="res/icon/windows-phone/icon-173-tile.png" />

  <preference name="permissions" value="none"/>
  <!-- <plugin name="org.crosswalk.engine" spec="1.3.0" source="pgb" /> -->
  <!-- <plugin name="cordova-plugin-crosswalk-webview" source="npm" /> -->
  <plugin name="cordova-plugin-whitelist" source="npm" />
  <plugin name="cordova-plugin-device" source="npm" />
  <plugin name="cordova-plugin-file" source="npm" />
  <plugin name="cordova-plugin-file-transfer" source="npm" />
  <plugin name="cordova-plugin-chrome-apps-filesystem" source="npm" />
  <!-- <plugin name="cordova-connectivity-monitor" source="npm" /> -->
  <preference name="phonegap-version" value="cli-5.2.0" />

  <allow-intent href="http://*/*" />
  <allow-intent href="https://*/*" />
</widget>

Jede Hilfe wird sehr geschätzt.

$('.download').click(function () {
  eval($('#jszipdemo').val())
})
.fill {
  width: 100%;
  display: block;
}
<link rel='stylesheet prefetch' href='http://treehouse-code-samples.s3.amazonaws.com/poly/css/application.css'>

<div class='grid'>
  <div class='grid__col--12'>
    <p></p>
    <button class='btn--default download fill'>Run</button>
    <textarea class='form__input' id='jszipdemo' placeholder='Demo code here...' rows='7'>var zip = new JSZip();&#x000A;zip.file("Hello.txt", "Hello World");&#x000A;var folder = zip.folder("images");&#x000A;folder.file("folder.txt", "I'm a file in a new folder");&#x000A;var content = zip.generate({type:"blob"});&#x000A;// see FileSaver.js&#x000A;saveAs(content, "example.zip");</textarea>
  </div>
</div>

<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script>
<script src='https://stuk.github.io/jszip/dist/jszip.js'></script>
<script src='https://stuk.github.io/jszip-utils/dist/jszip-utils.js'></script>
<script src='https://stuk.github.io/jszip/vendor/FileSaver.js'></script>


Sie können Binärdaten mit FileWriter speichern, das war in der Vergangenheit nicht möglich, aber jetzt ist es so

Erstelle deinen Blob auf diese Weise:

var byteArray = new Uint8Array(fileContent.length);
                        for (var x = 0; x < byteArray.length; x++){
                            byteArray[x] = fileContent.charCodeAt(x) & 0xff
                        }

 var blob = new Blob([byteArray], {type: 'application/octet-stream'});

und dann speichern Sie es

fileWriter.write(blob);




filesaver.js