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

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

     

     效果:

     腾讯云控制台上传效果

  • 相关阅读:
    hive使用derby的服务模式(可以远程模式)
    使用sqoop过程
    使用mongodump及mongorestore备份及恢复数据
    sql server 2000 错误229 拒绝了对象sysobjects 的select 权限
    node.js 连接 sql server 包括低版本的sqlserver 2000
    centos7 安装jdk1.8
    mybatis配置时出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    该网页已屏蔽以下插件Adobe Flash Player
    关于IntelliJ IDEA 文档无法编辑的解决办法
    华硕_ZX50JX4200 安装ssd固态盘
  • 原文地址:https://www.cnblogs.com/xyhghy/p/14968429.html
Copyright © 2020-2023  润新知