xyhghy

通过COS云储存可以实现百度网盘的功能!

登入腾讯云控制台 找到访问管理

 

点击左边的秘钥访问

 

 

 先把SecretID 和 SecretKey 保存下来

 

 找到对象储存 没有储存的可以试用或者购买 相当便宜

 点击储存库的链接 设置权限 

 

 

 

 设置好了之前 开始写代码 我用的是Maven框架

在pom.xml下导入包

<dependency>
      <groupId>com.qcloud</groupId>
      <artifactId>cos_api</artifactId>
      <version>5.6.38</version>
</dependency>

<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
</dependency>

<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-simple</artifactId>
     <version>1.7.25</version>
</dependency>

<dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
</dependency>

 

写配置文件 log4j.properties (可写可不写)

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller\'s file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

 

网页界面 src="图片预览链接"

<%--
  Created by IntelliJ IDEA.
  User: 羡羡
  Date: 2021/7/3
  Time: 16:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>文件上传到COS云储存</h1>
<form action="FileuploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="fname"/>
    <button type="submit">上传</button>
</form>
<img src="图片预览链接${filna}" alt="图片"/>
<a href="CosDelServlet?key=${filna}">删除</a>
<a href="CosdowServlet?key=${filna}">下载</a>
</body>
</html>

 

文件上传Servlet

package com.it;

import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import sun.corba.Bridge;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 * @author 羡羡
 */
@WebServlet("/FileuploadServlet")
public class FileuploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //工厂
        DiskFileItemFactory factory=new DiskFileItemFactory();
        //Servlet 文件上传
        ServletFileUpload upload=new ServletFileUpload(factory);
        //文件名乱码
        upload.setHeaderEncoding("UTF-8");
        try {
            List<FileItem> list=upload.parseRequest(request);
            for(FileItem fi:list){
                //判断是否文件和文字
                if(fi.isFormField()){
                    System.out.println("文件名:"+fi.getFieldName()+" "+fi.getString("UTF-8"));
                }else{
                    long ti=System.currentTimeMillis();
                    int wz=fi.getName().lastIndexOf(".");
                    String filna=fi.getName().substring(wz+1);
                    System.out.println("后缀名:"+filna);
                    //图片名字设置时间戳
                    String pna=ti+"."+filna;
                    System.out.println("图片名:"+pna);
                    InputStream in=fi.getInputStream();
                    CosFileupload.upfile(in,pna);
                    request.setAttribute("filna",pna);
                    request.getRequestDispatcher("index.jsp").forward(request,response);
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

 

文件储存工具类

package com.it;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;

import java.io.File;
import java.io.InputStream;

/**
 * 腾讯COS云储存
 * @author 羡羡
 */
public class CosFileupload {
    /**
     * SecretId 腾讯授权ID
     */
    public static String SECRET_ID="填写自己的授权ID";
    /**
     * SECRET_KEY 腾讯授权秘钥
     */
    public static String SECRET_KEY="填写自己的授权秘钥";
    /**
     * BUCKETNAME 储存库的名字
     */
    public static String BUCKETNAME="储存库名字";
    /**
     * REGIONID 储存库的区域编号  ap-guangzhou :地区广州储存库
     */
    public static String REGIONID="储存库地区";

    /**
     * 初始化配置信息
     * @return
     */
    public static COSClient Initialize(){
        /**
         * 初始化用户身份信息(secretId, secretKey)
         */
        COSCredentials cred = new BasicCOSCredentials(SECRET_ID, SECRET_KEY);
        /**
         * 设置bucket的区域 http方式
         */
        ClientConfig clientConfig = new ClientConfig(new Region(REGIONID));
        /**
         * 生成cos客户端
         */
        COSClient cosClient = new COSClient(cred, clientConfig);
        return cosClient;
    }

    /**
     *文件上传
     * @param Inputstream  传文件流
     * @param key  为文件名 需要唯一
     */
    public static void upfile(InputStream Inputstream, String key){
        /**
         * 得到初始化的对象
         */
        COSClient cosin=CosFileupload.Initialize();
        ObjectMetadata metadata=new ObjectMetadata();
        PutObjectRequest request=new PutObjectRequest(BUCKETNAME,key,Inputstream,metadata);
        cosin.putObject(request);
        cosin.shutdown();
    }

    /***
     * 下载文件
     * @param file 下载的路径
     * @param key  文件名
     */
    public static void downloadfile(File file,String key){
        /**
         * 指定下载的路径 + 文件名称
         */
        File dowfile=new File(file+"\\"+key);
        GetObjectRequest getobjrequest=new GetObjectRequest(BUCKETNAME,key);
        COSClient cosdowfile=CosFileupload.Initialize();
        cosdowfile.getObject(getobjrequest,dowfile);
        cosdowfile.shutdown();
    }

    /**
     * 删除文件
     * @param key 文件名
     */
    public static void delfile(String key){
        COSClient cosdelfile=CosFileupload.Initialize();
        cosdelfile.deleteObject(BUCKETNAME,key);
        cosdelfile.shutdown();
    }
}

 

 下载文件servlet

package com.it;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author 羡羡
 */
@WebServlet("/CosdowServlet")
public class CosdowServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //文件名
        String key=request.getParameter("key");
        //上传的路径
        File fil=new File("C:\\Users\\羡羡\\Desktop");
        CosFileupload.downloadfile(fil,key);
        PrintWriter out = response.getWriter();
        out.print("<script>alert(\'下载成功!\');location.href=\'index.jsp\'</script>");
    }
}

 

删除文件servlet

package com.it;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 羡羡
 */
@WebServlet("/CosDelServlet")
public class CosDelServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //删除

        //得到文件名
        String na=request.getParameter("key");
        CosFileupload.delfile(na);
        response.sendRedirect("index.jsp");
    }
}

 

查看预览链接 可以当图片标签的显示

 

 

 

 效果:

 腾讯云控制台上传效果

 

分类:

技术点:

相关文章:

  • 2021-07-30
  • 2021-11-21
  • 2022-01-23
  • 2021-11-21
  • 2022-12-23
  • 2021-11-21
  • 2021-11-21
  • 2021-08-31
猜你喜欢
  • 2022-12-23
  • 2021-11-21
  • 2021-07-27
  • 2021-11-21
  • 2022-12-23
  • 2021-11-21
  • 2021-11-21
相关资源
相似解决方案