
import com.rome.backend.common.R; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.UUID; /** * 文件上传下载 */ @RestController @RequestMapping ( "/common" ) public class CommonController { /** * 上传 * @param file * @return */ @PostMapping ( "/upload" ) public R<String> upload(MultipartFile file){ //参数名和前端input名一样 //file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除 //获取当前项目路径进行拼接 String url = System.getProperty( "user.dir" )+ "\\backend\\src\\main\\resources\\backend\\images\\dish\\dishload\\" ; //使用uuid重新生成文件名防止文件名重复造成覆盖,uuid+原始文件名 String uuid = UUID.randomUUID().toString(); // uuid+原始文件名 String fileName = uuid.concat(file.getOriginalFilename()); // 将文件转存 try { file.transferTo( new File(url+fileName)); } catch (IOException e) { throw new RuntimeException(e); } return R.success(fileName); } /** * 下载 * @param name * @param response */ @GetMapping ( "/download" ) public void download(String name, HttpServletResponse response){ //图片路径 String urlImg = System.getProperty( "user.dir" )+ "\\backend\\src\\main\\resources\\backend\\images\\dish\\dishload\\" .concat(name); try { //通过输入流读取文件内容 FileInputStream fileInputStream = new FileInputStream( new File(urlImg)); //输出流到浏览器 ServletOutputStream outputStream = response.getOutputStream(); //设置响应回去的是什么类型的文件 response.setContentType( "image/jpeg" ); int len = 0 ; byte [] bytes = new byte [ 1024 ]; while ((len = fileInputStream.read(bytes)) != - 1 ){ outputStream.write(bytes, 0 ,len); outputStream.flush(); } //关闭资源 outputStream.close(); fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } |
年少轻狂,总以为天下事竭力有为。人事尽时,终感力不能及。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!