मेरे सर्वर पर वेबसोकेट मेरे प्रतिक्रिया-मूल ऐप को पीडीएफ का एक सरणीबफर भेजता है और वहां से मैं यह पता लगाने की कोशिश कर रहा हूं कि पीडीएफ को कैसे प्रदर्शित किया जाए। मुझे ऐसा लगता है कि rn-fetch-blob इसका उत्तर होगा लेकिन मुझे नहीं पता कि कहां जाना है। ब्राउज़र पर, मैंने अभी यह किया है:

const pdfBlob = new Blob([e.data], {type: "application/pdf"})
const url = URL.createObjectURL(pdfBlob);
pdfViewer.setAttribute("src", url)

लेकिन रिएक्ट नेटिव इस तरह से ब्लब्स बनाने का समर्थन नहीं करता है। मेरा अगला प्रयास कुछ ऐसा कर रहा था:

fetch(e.data, {
  responseType: "arraybuffer"
})
  .then(res => res.arrayBuffer())
  .then(res => res.blob())
  .then(pdfBlob => {
    const url = URL.createObjectURL(pdfBlob);
    /** ... */
  })
  .catch(e => console.error(e));

लेकिन वह भी काम नहीं आया। मैं इस आदमी को जानता हूं। ए> यह छवियों के लिए काम कर रहा है जब सर्वर से उसकी प्रतिक्रिया एक ब्लॉब थी, लेकिन मुझे नहीं पता कि यह वही बात है या नहीं।

मैं अभी भी arraybuffers, blobs, fetching, आदि पर सुपर शेकी हूं इसलिए किसी भी मदद की बहुत सराहना की जाती है।

0
Nolence 18 अक्टूबर 2018, 21:19

1 उत्तर

सबसे बढ़िया उत्तर

मम्म यह कुछ समय पहले था इसलिए मैं अपने कोड के बारे में निश्चित नहीं हूं या यदि यह पहले से पुराना है। मुझे याद है कि प्रतिक्रिया के नए संस्करणों के साथ RNFetchBlob के अनावश्यक होने के बारे में कुछ पढ़ना लेकिन यहाँ मैंने यह कैसे किया:

import RNFetchBlob from "rn-fetch-blob";
const { fs } = RNFetchBlob;

connection.onmessage = e => {
  if (typeof e.data === "string") {
    /* not array buffer */
  } else if (e.data.constructor === ArrayBuffer) {
    const base64 = binaryToBase64(e.data);
    const filePath = `${fs.dirs.CacheDir}/${shortid.generate()}.pdf`;

    RNFetchBlob.fs.createFile(filePath, base64, "base64").then(path => {
      // necessary ?
      RNFetchBlob.session("all").add(path);
    });
  }
};

मुझे लगता है कि मैंने session के लिए पथ जोड़ा है ताकि मैं बाद में उनकी सत्र आईडी द्वारा पीडीएफ को थोक में हटा सकूं। अन्यथा, मुझे लगता है कि उस पथ से आप इसे पीडीएफ घटक में इस तरह से पास कर सकते हैं:

<Pdf source={{ uri: path, cache: false }} />
2
Nolence 31 मई 2019, 12:44