理想是火,点燃熄灭的灯。
在前端或者后端处理文件时,多多少少会接触到这些文件的格式处理
各自先介绍一下:
示例代码:
// 读取本地文件内容并转换为 ArrayBuffer const fileInput = document.getElementById('file-input'); fileInput.addEventListener('change', function(event) { const file = event.target.files[0]; const reader = new FileReader(); reader.onload = function(event) { const arrayBuffer = event.target.result; // 对 ArrayBuffer 进行处理 // ... }; reader.readAsArrayBuffer(file); });
// 获取文件对象并转换为 Blob const fileInput = document.getElementById('file-input'); fileInput.addEventListener('change', function(event) { const file = event.target.files[0]; const formData = new FormData(); formData.append('file', file); // 使用 XMLHttpRequest 或 Fetch API 发送 FormData 到服务器 // ... });
const fileInput = document.getElementById('file-input'); fileInput.addEventListener('change', function(event) { const file = event.target.files[0]; const stream = file.stream(); // 获取文件流 // 逐块读取文件数据并发送到服务器 const reader = stream.getReader(); function readAndSend() { reader.read().then(({ value, done }) => { if (done) { // 文件读取完成 return; } // 将读取的数据块发送到服务器 fetch('upload-url', { method: 'POST', body: value }).then(() => { // 继续读取下一块数据 readAndSend(); }); }); } readAndSend(); });
示例代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>文件上传示例</title> </head> <body> <!-- 文件上传表单 --> <input type="file" id="fileInput"> <script> // 获取文件上传输入框 const fileInput = document.getElementById('fileInput'); // 添加事件监听器,当用户选择文件后触发 fileInput.addEventListener('change', function(event) { // 获取用户选择的文件 const file = event.target.files[0]; // 打印文件信息 console.log('文件名:', file.name); console.log('文件大小:', file.size, '字节'); console.log('文件类型:', file.type); // 可以在这里进行进一步操作,比如读取文件内容,上传文件等 }); </script> </body> </html>
如果使用了fetch可以在拿到结果之后直接blob()即可
const response = await fetch(url) const blob = await response.blob() const objectUrl = window.URL.createObjectURL(blob) //objectUrl 可以进行预览 比如 <img src={objectUrl } />
如果不想这么搞,也可以
// 假设你有一个文件流 stream,可以是通过文件选择器或其他方式获取的 // 这里只是一个示例,实际情况中你需要根据你的具体需求获取文件流 const fileStream = getYourFileStreamSomehow(); // 创建一个 Blob 对象 const blob = new Blob([fileStream], { type: 'application/octet-stream' }); // 现在你可以使用这个 Blob 对象做你想做的事情,比如上传到服务器
// 假设你有一个文件流 stream,可以是通过文件选择器或其他方式获取的 // 这里只是一个示例,实际情况中你需要根据你的具体需求获取文件流 const fileStream = getYourFileStreamSomehow(); // 创建一个 Blob 对象 const blob = new Blob([fileStream], { type: 'application/octet-stream' }); // 使用 Blob 构造一个 File 对象 const file = new File([blob], 'filename.ext', { type: 'application/octet-stream' }); // 现在你可以使用这个 File 对象做你想做的事情,比如上传到服务器
// 流转base64 export const stream2Base64 = (stream, base64String = '') => { return new Promise((resolve) => { // 创建一个FileReader对象 var reader = new FileReader() reader.onload = (e) => { base64String = reader.result resolve(base64String) } // 开始读取数据流 reader.readAsDataURL(stream) }) } const base64 = await stream2Base64(responseStream) //html <img src={base64}/>
const element = document.createElement('a') let works_localStorage = '123' element.setAttribute('href', 'data:application/text;charset=utf-8,' + encodeURIComponent(works_localStorage)) element.setAttribute('download', 'works.text') element.style.display = 'none' element.click() element.remove()
export const downImgFromStream = (stream, fileName) => { // 创建一个 <a> 标签 var link = document.createElement('a') link.href = URL.createObjectURL(stream) // 模拟点击 <a> 标签进行下载 link.download = `${revemoFileSuffix(fileName)}.jpg` link.click() // 释放 URL 对象 URL.revokeObjectURL(link.href) }
function base64ToFile(base64) { const byteString = atob(base64.split(",")[1]); const mimeString = base64 .split(",")[0] .split(":")[1] .split(";")[0]; const ab = new ArrayBuffer(byteString.length); const ia = new Uint8Array(ab); for (let i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new File([ab], "1.jpg", { type: mimeString }); }
function dataURItoBlob(dataURI) { var byteString = atob(dataURI.split(",")[1]); var mimeString = dataURI .split(",")[0] .split(":")[1] .split(";")[0]; var ab = new ArrayBuffer(byteString.length); var ia = new Uint8Array(ab); var filename = "1.jpg"; for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new Blob([ab], { type: mimeString }); }
作者: Bill 本文地址: http://biaoblog.cn/info?id=1713940744826
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!