前端通过方法解析出一个,文件上传的本地主机路径URL,后端怎么接收这个URL,是需要后端生成的URL怎么写呢?
哈喽,上传文件到服务器,然后保存文件,本地环境放本地,外网放服务器,也可以上传oss,可以根据请求地址判断什么环境:
代码大致如下:
public String uploadOssImg(@RequestParam("file") MultipartFile multipartFile,HttpServletRequest req) {
String reqUrl = req.getServerName(); // 通过这个判断环境
String path = saveOneImg(multipartFile); // 保存
return '本地域名或外网域名或oss域名'+path
}
// 保存图片并返回路径,根据返回的路径进行域名拼接,即为完整路径
public String saveOneImg( MultipartFile multipartFile){
if (multipartFile.isEmpty() || StringUtils.isBlank(multipartFile.getOriginalFilename())) {
log.error("未上传文件");
return null;
}
String contentType = multipartFile.getContentType();
if (!contentType.contains("")) {
log.error("类型检测错误");
return null;
}
String originalFileName = multipartFile.getOriginalFilename();
String fileType = originalFileName.substring(originalFileName.lastIndexOf("."));
String dirPath = '自己拼路径';
String savePath = location + dirPath; // location为服务器暴露外部访问路径
String path = null;
try {
path = dirPath + '/' + write(multipartFile, savePath,fileType);
} catch (IOException e) {
e.printStackTrace();
}
return path;
}
// 写文件
public String write(MultipartFile multipartFile, String savePath, String type) throws IOException {
File file = new File(savePath);
if (!file.exists()) {
file.mkdirs();
}
FileInputStream fileInputStream = (FileInputStream) multipartFile.getInputStream();
String fileName = UUIDUtil.getUuid() + type;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(savePath + File.separator + fileName));
byte[] bs = new byte[1024];
int len;
while ((len = fileInputStream.read(bs)) != -1) {
bos.write(bs, 0, len);
}
bos.flush();
bos.close();
return fileName;
}
ajax,或者js提交表单
通过接口传到后端。需要定义一个接口
正常情况是,文件上传功能对接(对接的方式可以选择上面广大菜鸟的回答ajax的方式 )一个后端接口(上面李筱宝 的回答就是一个文件上传的接口),由后端将文件存储并返回文件的地址url。
可以参考一些开源项目的源码,来看看别人是怎么做的。
现在主流都是前后端分离,上传文件都不是上转文件路径,而是上传一个文件对象,然后后端接收到文件对象,保存在服务器里。 然后你访问的时候,一般也是以接口的形式,后端会给你一个文件路径,他给你路径,你访问他的时候做一个简单拼接就行,具体拼接你要问后端协商。
@PostMapping("/upload")
public void uploadOssImg(@RequestParam("file") MultipartFile multipartFile) {
1、将这个文件保存在服务器本地
// 可以参考这种代码 Files.write(Paths.get("新的文件路径"), Files.readAllBytes(Paths.get(files.getAbsolutePath()))); 具体可以百度超级多
2、获取到该文件的相对路径
3、将该路径与你项目的外网 URL 地址拼接,这个不懂可以问你们运维要地址
4、该路径返回给前端
5、这个路径就是可以直接在前端展示的了
}
有用望采纳