当前位置: 首页> 房产> 建筑 > 手机wap网站免费建站_河南省洛阳市洛龙区疫情_上海还能推seo吗_seo sem关键词优化

手机wap网站免费建站_河南省洛阳市洛龙区疫情_上海还能推seo吗_seo sem关键词优化

时间:2025/7/9 7:24:45来源:https://blog.csdn.net/qq_44543774/article/details/142491805 浏览次数:0次
手机wap网站免费建站_河南省洛阳市洛龙区疫情_上海还能推seo吗_seo sem关键词优化

一、文件上传

使用MultipartFile 类型接收参数;

调用上传有两种方式:

方式一:使用curl命令

curl -F "file=@/data/filename.txt" http://localhost:8080/upload --verbose

方式二:使用html,写一个form表单:

同样是POST请求,为何文件上传的功能会慢?其中一个原因是, 使用multipart/form-data编码,需要对数据进行分块处理,增加时间开销。服务器端也需要解析这些分块数据,并将其转化为文件或其它形式处理,这个过程也会增加时间开销。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Upload</title>
</head>
<body>
<div style="margin-left: 300px; margin-top: 50px;"><form action="/upload" method="post" enctype="multipart/form-data" accept-charset="UTF-8"><input type="file" name="file"/><br/><br/><button type="submit">上传</button></form>
</div>
</body>
</html>

Java后端上传示例:

    @RequestMapping(value = "/upload", method = RequestMethod.POST)public String upload(@RequestParam("file") MultipartFile file) {try {//String dirPath = uploadPath + File.separator + port;这里要在本地留存一份文件,可以参考hutool的FileUtil临时文件(temp)做改进String dirPath = "D:\\桌面\\bx";File dirFile = new File(dirPath);if (!dirFile.exists()) {boolean ok = dirFile.mkdirs();log.debug("===> {} create dir {}", ok, dirPath);}String fileName = file.getOriginalFilename();String filePath = dirPath + File.separator + fileName;File dest = new File(filePath);file.transferTo(dest);log.debug("===> success upload file: {}", filePath);return dest.getName();} catch (Exception e) {throw new RuntimeException(e);}}

测试:
在这里插入图片描述
此时还会在D:\桌面\bx留存一份文件

一、文件下载

后端两种写下载的方式:返回void和返回byte[]

(1)返回byte[]:需要在内存中存储整个文件内容,对于大文件可能会导致内存问题。

代码示例:

    @RequestMapping(value = "/downloadBytes")@ResponseBodypublic byte[] downloadBytes(@RequestParam("fileName") String fileName, HttpServletResponse response) {String dirPath = uploadPath + File.separator + port;String filePath = dirPath + File.separator + fileName;File file = new File(filePath);if (!file.exists() && file.isFile()) {response.setStatus(HttpServletResponse.SC_NOT_FOUND);return null;}checkState(file.exists() && file.isFile(), "file not exists: %s", filePath);// 需要添加一些头信息,响应才知道是下载的文件// 添加字符集response.setCharacterEncoding("UTF-8");// 文件类型: 方式一:指定具体的文件类型;方式二:指定其是一个二进制格式// 其它的文件类型:text/plain、application/pdf、application/vnd.ms-excel、image/jpeg、image/pngresponse.setContentType("application/octet-stream");// 文件的名称,解决中文乱码String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);// attachment (附件) 提示浏览器下载, inline 提示浏览器显示内容(如果支持的话)response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");try (InputStream inputStream = new FileInputStream(file)) {byte[] bytes = new byte[(int) file.length()];int readLen = inputStream.read(bytes);log.debug("====> readLen {}", readLen);return bytes;} catch (Exception e) {log.error(e.getMessage());response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);return null;}}

(2)返回 void 的方式通常会使用流式传输(streaming)的方式来发送文件内容,这意味着文件是以一段一段的方式发送的。这样做有几个好处:

1、节省内存:整个文件不需要一次性加载到内存中,减少了内存占用。对于大文件尤其重要。
2、更高效:可以立即开始传输文件的部分内容,而不需要等待整个文件加载完成。
代码示例:

    /*** 下载** @param fileName* @param response*/@RequestMapping(value = "/download")public void download(@RequestParam("fileName") String fileName, HttpServletResponse response) {//dirPath 为从哪里下载,这里写的是String dirPath = "D:\\桌面\\bx"; 意思是从dirPath 下载文件名为fileName的文件String dirPath = uploadPath + File.separator + port;String filePath = dirPath + File.separator + fileName;File file = new File(filePath);if (!(file.exists() && file.isFile())) {response.setStatus(HttpServletResponse.SC_NOT_FOUND);log.debug("====> file not exists: {}", filePath);return;}// 需要添加一些头信息,响应才知道是下载的文件// 添加字符集response.setCharacterEncoding("UTF-8");// 文件类型: 方式一:指定具体的文件类型;方式二:指定其是一个二进制格式// 其它的文件类型:text/plain、application/pdf、application/vnd.ms-excel、image/jpeg、image/pngresponse.setContentType("application/octet-stream");// 文件的名称,解决中文乱码String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);// attachment (附件) 提示浏览器下载, inline 提示浏览器显示内容(如果支持的话)response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");// 文件的长度response.setContentLength((int) file.length());try (InputStream inputStream = new FileInputStream(file);BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {byte[] bytes = new byte[1024 * 16];int len = 0;ServletOutputStream outputStream = response.getOutputStream();while ((len = bufferedInputStream.read(bytes)) != -1) {outputStream.write(bytes, 0, len);}outputStream.flush();} catch (Exception e) {log.error(e.getMessage());response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);}}

postman测试结果:
在这里插入图片描述
点这里就可以保存到文件夹;
参考:https://blog.csdn.net/hefrankeleyn/article/details/140909190

关键字:手机wap网站免费建站_河南省洛阳市洛龙区疫情_上海还能推seo吗_seo sem关键词优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: