通过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"); } }
查看预览链接 可以当图片标签的显示
效果:
腾讯云控制台上传效果