



理想是火,点燃熄灭的灯。



在前端或者后端处理文件时,多多少少会接触到这些文件的格式处理
各自先介绍一下:
示例代码:
// 读取本地文件内容并转换为 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 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!