javascript - एचटीएमएल 5 के माध्यम से एंड्रॉइड पर बाइनरी स्ट्रिंग का उपयोग कर फाइल को सहेजें



android cordova (1)

मैं अपने ऐप के साथ एक छोटी सी 3 टीम टीम के साथ काम कर रहा हूं और हम फंस गए हैं।

हमारे कोड एडिटर आवेदन के लिए फाइलों को सहेजने के लिए हम जेस्ज़िप और फाइलसवर का उपयोग कर रहे हैं। यह ब्राउज़र में ठीक काम करता है, लेकिन जब मैं इसे फोनगैप के साथ एक देशी एंड्रॉइड एप्लिकेशन के रूप में उपयोग करता हूं जो इसे लिखता नहीं है।

यह समस्या अभी भी zip.js लाइब्रेरी के साथ होती है और यहां तक ​​कि एक फाइल को FileSaver.js लाइब्रेरी से भी सहेजती है

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

मैंने फोनगैप के फाइलर्रर ऑब्जेक्ट का उपयोग करने की कोशिश की, लेकिन बाद में मुझे पता चला कि फोनगैप के फाइलर्रेटर - स्रोत - स्रोत के साथ द्विआधारी डेटा लिखने में वर्तमान में असंभव है

हालांकि यह पद कुछ साल पुराना है।

मैंने इसे मूल वेबविय के साथ काम करने और क्रॉसवॉक प्रोजेक्ट का उपयोग करने की कोशिश की है और अभी भी कोई भाग्य नहीं है

हमने भी कोशिश की है ...

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)
  })
}

इस के साथ समस्या यह है कि उपयोगकर्ता स्मृति (एसडी कार्ड में या नहीं, हमने अपने सभी एंड्रॉइड डिवाइस पर परीक्षण किया है और अभी भी काम नहीं करता है, लेकिन ध्यान रखें कि हम किसी रूट वाले डिवाइस का उपयोग नहीं कर रहे हैं), और नहीं JSZip के साथ काम करते हैं

हमारी टीम कई अलग-अलग ऑपरेटिंग सिस्टम (मैक, एंड्रॉइड, क्रोमियम) पर विकसित होती है इसलिए फोनगैप बिल्ड वर्तमान में एक आवश्यकता है।

क्या किसी को यह करने का कोई तरीका पता है?
एचटीएमएल 5 के माध्यम से एंड्रॉइड पर एक बाइनरी स्ट्रिंग का उपयोग कर फ़ाइल को सहेजने के लिए भेजा जा रहा है? (फोनगैप या फोनगैप बिल्ड का उत्तर अत्यधिक पसंद किया जाता है)

फ़ोनगैप बिल्ड के लिए हमारा वर्तमान XML है:

<?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>

कोई भी मदद बहुत ही सराहनीय होगी।

$('.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>


आप बायवेयर डेटा को फायरवेयर के साथ सहेज सकते हैं, यह अतीत में संभव नहीं था, लेकिन अब यह है

इस तरह से अपना ब्लॉब बनाएं:

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'});

और फिर इसे बचाने के लिए

fileWriter.write(blob);




filesaver.js