前端上传文件夹或文件至后端(SpringBoot)

前端

前端上传文件夹使用的是input标签的file属性,最重要的是webkitdirectory这个属性,有了这个属性之后input才可以选择文件夹,但也只能选择文件夹了。
在webkitdirectory的官方文档里有对该属性的说明。

<input type="file" id="folder" name="file" webkitdirectory multiple />

我们可以在这基础上做延伸,做一个表单来上传文件夹:

<form action="#" method="POST" enctype="multipart/form-data">
	<input id="folder" type="file" name="file" webkitdirectory/>
	<input type="submit" value="上传文件夹"/>
</form>

form要加上enctype=“multipart/form-data”,method用的是POST,action写的是后端上传方法的接口,例如:http://localhost:8080/file/upload

效果是这样的
在这里插入图片描述
有点简陋,但不碍事。

后端

前端把文件夹传给后端后,后端该怎么接收呢?

	@PostMapping("/qnupload")
    public String qiniuUpload(HttpServletRequest request) throws IOException {
        MultipartHttpServletRequest params = ((MultipartHttpServletRequest) request);
        List<MultipartFile> files = params.getFiles("file");
        for (int i=0; i < files.size();i++) {
            kodeUploadServiceImpl.uploadFiles(files.get(i));
            System.out.println("success:" + files.get(i));
        }
        return "complete";
    }

HttpServletRequest接收,然后将request转型为MultipartHttpServletRequest,再通过getFiles方法获得List,我们就可以对List做遍历来处理每个文件了。

最后,如果想上传文件的话就要在开个form表单,去掉webkitdirectory属性就好了,再加个multiple属性就可以多选了,因为理论上用了webkitdirectory属性就不能选择文件了,但是嗷,我把项目放服务器上测试的时候,室友用ipad打开网站后上传了个图片文件成功了,具体原因我也没搞懂。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端将图片转化为文件流并传递到后端时,可以使用 HTML5 中的 File API 和 FormData 对象。具体步骤如下: 1. 使用 input 元素的 type 属性设置为 file,让用户选择图片文件。 2. 通过 File API 中的 FileReader 对象,将图片文件转换为二进制数据流。 3. 将二进制数据流转换为 Blob 对象,并将其作为 FormData 对象的一个字段,然后将 FormData 对象通过 XMLHttpRequest 或 fetch API 发送到后端。 以下是一个使用 XMLHttpRequest 对象将图片文件流传递到后端的示例代码: ```html <!-- HTML 代码 --> <input type="file" id="file-input"> <button onclick="upload()">上传</button> ``` ```javascript // JavaScript 代码 function upload() { const fileInput = document.getElementById('file-input'); const file = fileInput.files[0]; const reader = new FileReader(); reader.onload = function() { const blob = new Blob([reader.result], { type: file.type }); const formData = new FormData(); formData.append('image', blob, file.name); const xhr = new XMLHttpRequest(); xhr.open('POST', '/upload'); xhr.send(formData); }; reader.readAsArrayBuffer(file); } ``` 在上面的代码中,首先通过 input 元素获取用户选择的图片文件,然后使用 FileReader 对象将图片文件转换为二进制数据流。接着,将二进制数据流转换为 Blob 对象,并将其添加到 FormData 对象中。最后,使用 XMLHttpRequest 对象将 FormData 对象发送到后端。 需要注意的是,以上代码仅供参考,实际开发中可能需要对代码进行适当的修改以适应具体的业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值