我想使用jszip加载一个压缩包,获取里面的docx文件,返回一个文件地址或者xml,给wps加载项用,本来是想试一试blob是否可以,但是打出来的日志返回的是一个Blob {size: 10372, type: ''}
,async里面的type写为string的时候,打出来的日志是个乱码
export async function getDocx(file) { try { // 创建一个JSZip实例 const zip = new JSZip(); // 使用JSZip加载压缩包 const zipData = await zip.loadAsync(file, {createFolders: true}); // 获取压缩包内的文件列表 const fileNames = Object.keys(zipData.files); // 遍历文件列表并获取文件内容 for (const fileName of fileNames) { const file = zipData.files[fileName]; console.log(fileName, file) // 如果文件后缀是docx,返回 if (!file.dir && file.name.endsWith('.docx')) { // 确保是文件而不是目录,并且是.docx文件 // 以正确的MIME类型返回Blob const docxBlob = await file.async('blob') console.log(docxBlob) return docxBlob } console.log(`文件名:${fileName}`); } // return fileNames } catch (error) { console.error('解压缩出错:', error); }}
想知道一下这个该怎么办,wps加载项需要是一个docx地址,或者是一个xml文件
解码器格式设置为 gbk 就行了
const decoder = new TextDecoder("gbk")async function handleUpload(e) { const files = e.target.files outer: for (let i = 0; i < files.length; i++) { const f = files[i] const res = await zip.loadAsync(f, { decodeFileName: text => decoder.decode(text) }) for (const f in res.files) { const target = res.files[f] const data = await target.async("blob") const file = new File([data], target.name, { type: data.type }) const result = await upload(target.name, file) break outer } } }
在 JSZip 中,当你通过 async('blob')
方法获取文件内容时,你确实会得到一个 Blob
对象。Blob
对象代表了不可变的原始数据,它通常用于表示大二进制数据对象,如图片或文件。WPS 加载项可能不能直接接受一个 Blob
URL 作为文件路径,因为它实际上是一个指向内存中数据的临时 URL。
但是,你可以创建一个指向这个 Blob
对象的 URL,然后尝试使用这个 URL。这可以通过使用 URL.createObjectURL()
方法来实现。此外,由于你的函数是异步的,你应该确保正确处理了异步操作的结果。
下面是如何修改你的代码以创建一个 Blob URL 的示例:
export async function getDocx(file) { try { // 使用JSZip加载压缩包 const zip = new JSZip(); const zipData = await zip.loadAsync(file); // 不需要 {createFolders: true},因为这是加载操作 // 遍历文件列表并获取文件内容 for (const fileName of Object.keys(zipData.files)) { const zipFile = zipData.files[fileName]; // 如果文件后缀是docx,返回 if (!zipFile.dir && fileName.endsWith('.docx')) { const docxBlob = await zipFile.async('blob'); // 创建一个指向 Blob 的 URL const docxUrl = URL.createObjectURL(docxBlob); // 在这里,你可以返回 URL 或者将其传递给 WPS 加载项 console.log(docxUrl); // 打印 URL 用于调试 // 注意:当你不再需要这个 URL 时,应该使用 URL.revokeObjectURL(docxUrl) 释放它 // 如果 WPS 加载项支持 Blob URL,你可以直接返回它 return docxUrl; } } // 如果没有找到 .docx 文件,你可能想要抛出一个错误或返回 null/undefined throw new Error('没有找到 .docx 文件'); } catch (error) { console.error('解压缩或处理文件出错:', error); // 在这里处理错误,或者抛出一个新的错误 throw error; }}
请注意,URL.createObjectURL()
创建的 URL 是临时的,并且在文档卸载时或者在调用 URL.revokeObjectURL()
时会被自动释放。如果你打算在长时间内使用这个 URL(例如,将其存储在某个地方以便稍后使用),那么你应该确保在不再需要它时调用 URL.revokeObjectURL()
以避免内存泄漏。
另外,请注意,WPS 加载项可能需要特定格式的 URL 或文件路径,因此请确保它支持 Blob URL,或者你可能需要将 Blob 保存到磁盘上的某个位置并返回该文件的路径(但这通常不推荐,因为它涉及写入文件系统,并可能受到浏览器安全策略的限制)。
我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?
问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:
本文向大家介绍Android如何实现压缩和解压缩文件,包括了Android如何实现压缩和解压缩文件的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 代码到此结束,关于Android实现压缩和解压缩文件的全内容就给大家介绍这么多,希望能够帮助到大家!
Kafka producer正在发送.gz文件,但无法在消费者端解压缩和读取文件。获取错误为“IOError:不是gzipped文件” producer-bin/kafka-console-producer.sh--broker-list localhost:9092-topic Airport<~/downloads/stocks.json.gz 消费者- 使用者出错-
压缩包链接 有什么解决思路?
tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使