【springboot】保存前端传来的文件到本地

        前一段时间在看谷粒学院的项目的时候,发现前端上传文件需要保存到云上的服务器,云服务器厂商提供文件保存服务,于是本着省事的原则,自己写了简单的保存文件逻辑

接口: 获取文件,保存到本地,并放回磁盘映射路径(不是绝对路径)

package com.malguy.eduservice.controller;

import com.malguy.commonutils.R;
import com.malguy.commonutils.UploadUtils;
import com.malguy.eduservice.service.EduTeacherService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
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 java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author malguy-wang sir
 * @create ---
 */
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
@Api(description="文件上传接口")
public class OssController {
    @Autowired
    private EduTeacherService teacherService;
    //上传头像的方法
    @PostMapping
    @ApiOperation("上传文件,保存到本地,并返回磁盘映射路径")
    public R uploadOssFile(MultipartFile file) {
        //获取上传文件  MultipartFile
        //获取文件的内容
        try {
            InputStream is = file.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取原始文件名
        String originalFilename = file.getOriginalFilename();
        System.out.println(originalFilename);
        //生成一个uuid名称出来
        String uuidFilename = UploadUtils.getUUIDName(originalFilename); 
        //创建新的文件
        //linux
//        File newFile = new File("var/blob/guli_user",uuidFilename);
        //windows
        File newFile = new File("D:/blob/guli_user",uuidFilename);
        //将文件输出到目标的文件中
        try {
            file.transferTo(newFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //返回上传到oss的路径
        return R.ok().data("url",
                "http://localhost:9001/img/eduservice/teacher/"+uuidFilename);
    }
}

配置磁盘映射路径

package com.malguy.eduservice.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author malguy-wang sir
 * @create ---
 */
@Configuration
public class FilePathConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/eduservice/teacher/**")//虚拟地址,如1/1.jpg
                .addResourceLocations("file:D:\\blob\\guli_user\\");//       windows
//        .addResourceLocations("file:var/blob/guli_user"); //       linux
    }
}

工具类,生成随机UUID作为图片名

package com.malguy.commonutils; 
import java.util.UUID; 
/**
 * @author malguy-wang sir
 * @create ---
 */
public class UploadUtils {
    /**
     * 获取随机名称
     *
     * @param realName 真实名称
     * @return uuid 随机名称
     */
    public static String getUUIDName(String realName) { 
        //获取后缀名
        int index = realName.lastIndexOf(".");
        if (index == -1) {//如果没有后缀
            return UUID.randomUUID().toString().replace("-", "").toUpperCase();
        } else { //如果有后缀就接上
            return UUID.randomUUID().toString().replace("-", "")
                    .toUpperCase() + realName.substring(index); 
        }
    }
}

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
接收前端文件保存到服务器上的步骤可以如下所示,使用Java编程语言: 1. 在服务器端创建一个HTTP请求处理器,用于接收前端发送的文件数据。 2. 在HTTP请求处理器中,获取请求中的文件数据。可以通过使用HttpServletRequest对象来获取文件数据,具体取决于你使用的Web框架或库。 3. 将文件数据保存到服务器上的指定位置。可以使用Java的IO操作来完成文件保存操作,例如使用FileOutputStream来写入文件。 以下是一个简单的示例代码,演示了如何接收前端文件保存到服务器上: ```java import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取文件数据 Part filePart = request.getPart("file"); // 这里假设前端文件放在名为"file"的表单字段中 String fileName = filePart.getSubmittedFileName(); InputStream fileContent = filePart.getInputStream(); // 保存文件到服务器 String savePath = "/path/to/save/directory/" + fileName; // 指定保存目录文件名 try (OutputStream outputStream = new FileOutputStream(savePath)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fileContent.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } // 响应客户端 response.getWriter().println("文件上传成功"); } } ``` 在这个示例中,我们使用了Servlet来处理HTTP请求。可以根据自己的需求,使用适合的框架或库来处理HTTP请求和文件上传操作。 请记得根据实际情况修改示例代码中的文件保存路径和其他相关信息,确保代码能够正确运行并保存文件到服务器上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞鸟malred

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值