请问前端怎么将上传文件的名字修改?

input 标签 type="file" 选中图片后会有名字,我想把那个名字修改为没有后缀名的数字名称,然后才可以上传服务器,请问怎么做?
谢谢。

阅读 20.8k
2 个回答

确实通过File API获取到的file类型是只读的,即使获取了文件也无法修改文件名,

但是,我们仍然可以通过用原文件的数据构造一个新的file对象的方法来达到修改文件名的目的。

//上传图片
<input type="file" id="fileDemo">

//图片预览
<img id="uploadPreview">

---------------------------------------------

//获取文件对象
var file = document.querySelector("#fileDemo").files[0]

//创建新文件对象
var newfile = new File([file], new Date().getTime()+".jpg",{type:"image/jpeg"});


//以下为预览图片代码
var reader = new FileReader(); 
reader.onload = function (oFREvent) {
  document.querySelector("#uploadPreview").src = oFREvent.target.result;
};
reader.readAsDataURL(newfile);


---------------------------------------------


//以下是上传图片的方法
reader.onloadend = function() {
    // 这个事件在读取结束后,无论成功或者失败都会触发
    if (reader.error) {
        console.log(reader.error);
    } else {
        document.getElementById("bytesRead").textContent = file.size;
        // 构造 XMLHttpRequest 对象,发送文件 Binary 数据
        var xhr = new XMLHttpRequest();
        xhr.open(/* method */ "POST",
                /* target url */ "upload.jsp?fileName=" + file.name
                /*, async, default to true */);
        xhr.overrideMimeType("application/octet-stream");
        xhr.sendAsBinary(reader.result);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    console.log("upload complete");
                    console.log("response: " + xhr.responseText);
                }
            }
        }
    }
}

reader.readAsBinaryString(newfile);

参考资料:
1.使用 JavaScript File API 实现文件上传
2.MDN - Web API 接口 FileReader
3.js根据已有File对象,创建新的file对象

我觉得不能,浏览器出于安全考虑是不能修改客户端资源,只能上传到服务器上面修改

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏