elmentui+vue+springboot fastDfs文件上传(前端+后端整合直接上手)



import org.csource.fastdfs.*;

/**
 * fastDfs工具类
 */
public class FastDfsUtils {

    //从classpath:resources中的内容最终会编译到classpath下
    public static String CONF_FILENAME  = FastDfsUtils.class.getClassLoader()
            .getResource("fdfs_client.conf").getFile();


    /**
     * 上传文件
     * @param file
     * @param extName
     * @return
     */
    public static  String upload(byte[] file,String extName) {

        try {
            ClientGlobal.init(CONF_FILENAME);

            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer, storageServer);

            String fileIds[] = storageClient.upload_file(file,extName,null);

            System.out.println(fileIds.length);
            System.out.println("组名:" + fileIds[0]);
            System.out.println("路径: " + fileIds[1]);
            //  /group1/M00/00/09/rBEACmKXF8-AUc6KAANsldwx3H4713.jpg
            return  "/"+fileIds[0]+"/"+fileIds[1];

        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
    }
    /**
     * 上传文件
     * @param extName
     * @return
     */
    public static  String upload(String path,String extName) {

        try {
            ClientGlobal.init(CONF_FILENAME);

            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            String fileIds[] = storageClient.upload_file(path, extName,null);

            System.out.println(fileIds.length);
            System.out.println("组名:" + fileIds[0]);
            System.out.println("路径: " + fileIds[1]);
            return  "/"+fileIds[0]+"/"+fileIds[1];

        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
    }

    /**
     * 下载文件
     * @param groupName
     * @param fileName
     * @return
     */
    public static byte[] download(String groupName,String fileName) {
        try {

            ClientGlobal.init(CONF_FILENAME);

            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            byte[] b = storageClient.download_file(groupName, fileName);
            return  b;
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
    }


    /**
     * 删除文件
     * @param groupName
     * @param fileName
     */
    public static void delete(String groupName,String fileName){
        try {
            ClientGlobal.init(CONF_FILENAME);

            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            int i = storageClient.delete_file(groupName,fileName);
            System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
        } catch (Exception e) {
            e.printStackTrace();
            throw  new RuntimeException("删除异常,"+e.getMessage());
        }
    }

}
@RestController
@RequestMapping("/fastdfs")
public class FastDfsController {
    /**
     * 文件上传
     * @return
     *
     * MultipartFile:复杂文件对象,专门用来接收文件的对象
     * RESTFUL风格要接收复杂文件对象要加上一个注解:@RequestPart
     */
    @PostMapping("/upload")
    public JsonResult file(@RequestPart("file") MultipartFile file) throws IOException {
        // 1.从复杂对象中获取到文件的byte数组
        byte[] bytes = file.getBytes();
        // 2.getOriginalFilename():获取文件的原始名称
        String originalFilename = file.getOriginalFilename();

        // 3.利用coomonIo工具的方法获取到文件的后缀
        String extension = FilenameUtils.getExtension(originalFilename);
        // 4.调用上传工具上传文件
        String fileName = FastDfsUtils.upload(bytes, extension);
        // 5.响应文件名称
        return JsonResult.success(fileName);

    }
    @DeleteMapping("/delete")
    public JsonResult del(String path) throws IOException {
        // /group1/M00/00/2F/oYYBAGRxyKiAcRjaAA5Kws9ji_k408.gif
        path = path.substring(1);
        // 只要group
        String group = path.substring(0, path.indexOf("/"));
        // group1/M00/00/2F/oYYBAGRxyKiAcRjaAA5Kws9ji_k408.gif
        String fileName = path.substring(path.indexOf("/") + 1);
        // 4.调用上传工具上传文件
        FastDfsUtils.delete(group, fileName);
        // 5.响应文件名称
        return new JsonResult();
    }

}

导入依赖


        <!--fastdfs-->
        <dependency>
            <groupId>cn.bestwu</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27</version>
        </dependency>

创建配置文件  fdfs_client.conf

tracker_server=service-file-primary.(直接去注册一个):22122
#22122是tracker的端口 - 上传
#访问直接使用域名:123.207.27.208
#默认值为30s
这里使用的elmentui+vue
<el-form-item prop="字段" label="头像">
  <el-upload
      class="upload-demo"
      action="http://localhost:端口号/fastdfs/upload"
      :on-preview="handlePreview"
      :on-remove="handleRemove"
      :on-success="handleSuccess"
      :file-list="fileList"
      list-type="picture">
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
</el-form-item>
urls: "https://service-file-primary.(与配置文件一样)",
    handlePreview(file) {
      console.log("https://service-file-primary.()" + file);
    },
        //文件上传的业务逻辑----到数据库
    handleSuccess(response, file, fileList) {

      // 处理图片headImg
      if (this.teacherForm.headImg) {//有值
        this.teacherForm.headImg = this.teacherForm.headImg + "," + response.data;
      } else {
        this.teacherForm.headImg = response.data;
      }
      //处理fileList:resources = xx,xx,xx
      this.fileList = [];//先清空 
      if (this.teacherForm.headImg) {
        let arr = this.teacherForm.headImg.split(",");//[xx,xx,xx]
        for (var i = 0; i < arr.length; i++) {
          this.fileList.push({"url": "https://service-file-primary.()" + arr[i]});
        }
      }
    },
    //文件删除的业务逻辑
    handleRemove(file, fileList) {
      //1.调用删除接口删除fastdfs中的数据 :
      var url = file.url;
    
     
      var path = url.substring(url.indexOf("/group"));
      this.$http.delete("http://localhost:端口号/fastDfs?path=" + path).then(res => {
        if (res.data.success) {
          this.$message.success("删除成功!!!");
        } else {
          this.$message.success("删除失败!!!");
        }
      })
      //2.处理headImg
      if (this.teacherForm.headImg) { // xx,yy,zz
        let arr = this.teacherForm.headImg.split(","); //[xx,yy,zz]
        for (var i = 0; i < arr.length; i++) {
          if (path == arr[i]) {//找到了删除的图片
            arr.splice(i, 1);
            break;
          }
        }        
        this.teacherForm.headImg = arr.join(","); //xx,zz
      }
      //3.处理fileList
      this.fileList = [];//先清空 - 再添加最新的所有该宠物图片
      if (this.teacherForm.headImg) {
        let arr = this.teacherForm.headImg.split(",");//[xx,xx,xx]
        for (var i = 0; i < arr.length; i++) {
          this.fileList.push({"url": "http://service-file-primary.()" + arr[i]});
        }
      }
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值