zoukankan      html  css  js  c++  java
  • JavaWeb 文件上传腾讯COS云储存

    通过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");
        }
    }

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

     

     效果:

     腾讯云控制台上传效果

  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/xyhghy/p/14968429.html
Copyright © 2011-2022 走看看