主頁 > 前端設計 > JavaWeb servlet jsp 使用七牛云API上傳圖片

JavaWeb servlet jsp 使用七牛云API上傳圖片

2021-11-07 08:37:21 前端設計

文章目錄

  • JavaWeb servlet jsp 使用七牛云API上傳圖片
    • 工具類
      • 七牛云工具類
      • JDBC工具類
    • service
      • PhotoService
      • PhotoServiceImpl
    • Dao
      • PhotoDao
      • PhotoDaoImpl
    • vo
      • MyPutRet
      • Photo
      • Result
    • webapp
      • web.xml
      • data.jsp
      • detail.jsp
      • index.jsp
      • list.jsp
      • transfer.jsp
    • servlet
      • JDBCservlet
      • UploadServlet
    • 資料庫
    • 依賴

JavaWeb servlet jsp 使用七牛云API上傳圖片

這次是上一次的改進版本,相對上次好很多,上次很多作業混在一起沒法隨便分開

有興趣的可以看看我上次寫的:JavaWeb servlet jsp 上傳圖片,圖片存入資料庫,圖片從資料庫中取出,頁面顯示圖片

影片

image-20211106140718937

image-20211106141012448

image-20211106140853210

頁面其實用了一點jquery和layui來寫

工具類

七牛云工具類

檔案:

https://developer.qiniu.com/kodo/1239/java

package top.sehnsucht.util;

import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import lombok.Data;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */

public class Qiniu {
    private static String ACCESS_KEY = "xxx";//填寫你自己的
    private static String SECRET_KEY  = "xxx";
    private static String BUCKET_NAME = "xxx";
    private static String KEY = "";
    private static String FILE_PATH = "";


    /**
     * 自定義回傳的json格式
     */
    public static void setJson() {
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        StringMap putPolicy = new StringMap();
        putPolicy.put("callbackUrl", "http://api.example.com/qiniu/upload/callback");
        putPolicy.put("callbackBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"fsize\":$(fsize)}");
        putPolicy.put("callbackBodyType", "application/json");
        long expireSeconds = 3600;
        String upToken = auth.uploadToken(BUCKET_NAME, null, expireSeconds, putPolicy);
        System.out.println(upToken);
    }

    /**
     * 上傳檔案
     */
    public static void uploadPic(String key, String filePath) {
        KEY = key;FILE_PATH = filePath;
        //構造一個帶指定 Region 物件的配置類,這里可能需要根據自己情況改一下,點進原始碼看看情況,根據報錯改region
        Configuration cfg = new Configuration(Region.region2());
        UploadManager uploadManager = new UploadManager(cfg);
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        String upToken = auth.uploadToken(BUCKET_NAME);
        try {
            Response response = uploadManager.put(FILE_PATH, KEY, upToken);
            //決議上傳成功的結果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            System.out.println(putRet.hash);
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                ex2.printStackTrace();
            }
        }
    }

    /**
     * 回傳地址
     * @return
     */
    public static String picUrl() {
        String url = "http://r234valei.hn-bkt.clouddn.com";
        String picUrl = url + "/" + KEY;
        return picUrl;
    }
}

JDBC工具類

package top.sehnsucht.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/10/29
 */

public class DBUtil {
    // 定義資料庫連接引數
    public static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/junior";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "818181";


    // 注冊資料庫驅動
    static {
        try {
            Class.forName(DRIVER_CLASS_NAME);
        } catch (ClassNotFoundException e) {
            System.out.println("注冊失敗!");
            e.printStackTrace();
        }
    }

    // 獲取連接
    public static Connection getConn() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }

    // 關閉連接
    public static void closeConn(Connection conn) {
        if (null != conn) {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println("關閉連接失敗!");
                e.printStackTrace();
            }
        }
    }
    //測驗
    public static void main(String[] args) throws SQLException {
        System.out.println(DBUtil.getConn());
    }
}

service

PhotoService

package top.sehnsucht.service;

import top.sehnsucht.vo.Photo;

import java.util.ArrayList;
import java.util.Map;

/**
 * @Description: 圖片業務介面
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */

public interface PhotoService {
    /**
     * 獲取所有圖片路徑
     * @return
     */
    ArrayList<Map<String, String>> getAllPhotos();

    /**
     * 添加圖片到資料庫
     * @param name
     * @param photourl
     */
    void addPhoto(String name, String photourl);

    /**
     * 根據id查找圖片
     * @param id
     * @return
     */
    Photo selectPhotoById(Integer id);
}

PhotoServiceImpl

package top.sehnsucht.service.impl;

import top.sehnsucht.dao.PhotoDao;
import top.sehnsucht.service.PhotoService;
import top.sehnsucht.vo.Photo;

import java.util.ArrayList;
import java.util.Map;

/**
 * @Description: 圖片業務實作類
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */

public class PhotoServiceImpl implements PhotoService {
    private PhotoDao photoDao;

    public PhotoServiceImpl(PhotoDao photoDao) {
        this.photoDao = photoDao;
    }


    @Override
    public ArrayList<Map<String, String>> getAllPhotos() {
        return photoDao.getAllPhotos();
    }

    @Override
    public void addPhoto(String name, String photourl) {
        photoDao.addPhoto(name, photourl);
    }

    @Override
    public Photo selectPhotoById(Integer id) {
        return photoDao.getPhotoById(id);
    }
}

Dao

PhotoDao

package top.sehnsucht.dao;

import top.sehnsucht.vo.Photo;

import java.util.ArrayList;
import java.util.Map;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */

public interface PhotoDao {

    /**
     * 回傳ArrayList<Map<String,String>>,方便轉成json傳到前端
     * @return
     */
    ArrayList<Map<String,String>> getAllPhotos();

    /**
     * 添加photo到資料庫中
     * @param name
     * @param photourl
     */
    void addPhoto(String name, String photourl);

    /**
     * 獲得最大的id
     * @return
     */
    Integer getMaxId();

    /**
     * 根據id查找圖片
     * @param id
     * @return
     */
    Photo getPhotoById(Integer id);

    /**
     * 獲得資料庫中圖片的數量
     * @return
     */
    Integer photoCount();
}

PhotoDaoImpl

package top.sehnsucht.dao.impl;

import top.sehnsucht.dao.PhotoDao;
import top.sehnsucht.util.DBUtil;
import top.sehnsucht.vo.Photo;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */

public class PhotoDaoImpl implements PhotoDao {
    @Override
    public ArrayList<Map<String, String>> getAllPhotos() {
        Connection conn = null;
        PreparedStatement ps = null;
        FileInputStream in = null;
        ResultSet rs = null;
        ArrayList<Map<String, String>> arrs = new ArrayList<>();
        try {
            conn = DBUtil.getConn();
            String sql = "select id,name,photourl from photo order by id";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery(sql);
            while (rs.next()) {
                Map<String, String> map = new HashMap();
                Integer id = rs.getInt(1);
                String name = rs.getString(2);
                String photourl = rs.getString(3);
                System.out.println("查詢: " + id + " " + name + " " + photourl);
                map.put("id", id.toString());
                map.put("name", name);
//                map.put("photourl",photourl);
                arrs.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeConn(conn);
            if (null != ps) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return arrs;
    }

    @Override
    public Photo getPhotoById(Integer id) {
        Connection conn = null;
        PreparedStatement ps = null;
        FileInputStream in = null;
        ResultSet rs = null;
        Integer thisId = null;
        String name = null;
        String photourl = null;
        try {
            conn = DBUtil.getConn();
            System.out.println("id:" + id);
            String sql = "select * from photo where id = " + id;
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery(sql);
            while (rs.next()) {
                thisId = rs.getInt(1);
                name = rs.getString(2);
                photourl = rs.getString(3);
                System.out.println(thisId);
                System.out.println(name);
                System.out.println(photourl);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeConn(conn);
            if (null != ps) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return new Photo(thisId, name, photourl);
    }

    @Override
    public Integer photoCount() {
        Connection conn = null;
        PreparedStatement ps = null;
        FileInputStream in = null;
        ResultSet rs = null;
        int ans = 0;
        try {
            conn = DBUtil.getConn();
            String sql = "select id,name from photo ";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery(sql);
            while (rs.next()) {
                ans++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeConn(conn);
            if (null != ps) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return ans;
    }

    @Override
    public void addPhoto(String name, String photourl) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = DBUtil.getConn();
            String sql = "insert into photo (id,name,photourl)values(?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, getMaxId() + 1);//資料庫表我弄成自增的了
            ps.setString(2, name);
            ps.setString(3, photourl);
            int count = ps.executeUpdate();
            if (count > 0) {
                System.out.println("插入成功!");
            } else {
                System.out.println("插入失敗!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeConn(conn);
            if (null != ps) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public Integer getMaxId() {
        Connection conn = null;
        PreparedStatement ps = null;
        FileInputStream in = null;
        ResultSet rs = null;
        int ans = 0;
        try {
            conn = DBUtil.getConn();
            String sql = "select max(id) from photo";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery(sql);
            while (rs.next()) {
                ans = rs.getInt(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeConn(conn);
            if (null != ps) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return ans;
    }
}

vo

MyPutRet

這個是七牛云回傳的一個json,不過好像沒有用上

package top.sehnsucht.vo;

import lombok.Data;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */
@Data
public class MyPutRet {
    public String key;
    public String hash;
    public String bucket;
    public long fsize;
}

Photo

物體類,干脆直接放vo了

package top.sehnsucht.vo;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/5
 */
@Data
@AllArgsConstructor
public class Photo {
    private Integer id;
    private String name;
    private String photourl;
}

Result

layui回傳物件

package top.sehnsucht.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/10/9
 * ~~(^_^)~~
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
    //回傳碼
    private Integer code;
    //回傳描述
    private String message;
    //回傳資料
    private T data;
    //分頁查詢總記錄
    private Long count;

    public static Result<Object> success() {
        return new Result(0, "success", null, null);
    }

    public static Result<Object> success(String message) {
        return new Result(0, message, null, null);
    }

    public static Result<Object> success(Object data, Long count) {
        return new Result(0, "success", data, count);
    }

    public static Result<Object> fail() {
        return new Result(1, "fail", null, null);
    }

    public static Result<Object> fail(String message) {
        return new Result(1, message, null, null);
    }
}

webapp

部分頁面參考了jquerylayui

web.xml

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <display-name>Archetype Created Web Application</display-name>
  
  <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>top.sehnsucht.UploadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>jdbc</servlet-name>
    <servlet-class>top.sehnsucht.JDBCServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>jdbc</servlet-name>
    <url-pattern>/jdbc</url-pattern>
  </servlet-mapping>
  
</web-app>

data.jsp

<%@ page import="com.alibaba.fastjson.JSON" %>
<%@ page import="top.sehnsucht.vo.Result" %>
<%@ page import="top.sehnsucht.dao.PhotoDao" %>
<%@ page import="top.sehnsucht.dao.impl.PhotoDaoImpl" %>
<%@ page import="top.sehnsucht.service.PhotoService" %>
<%@ page import="top.sehnsucht.service.impl.PhotoServiceImpl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    response.setHeader("Content-Type", "application/json;charset=UTF-8");//注意加上這一句

    System.out.println("現在路徑是: " + request.getRequestURL());

    Result result = new Result();
    result.setCode(0);
    result.setCount(1L);

    PhotoDao photoDao = new PhotoDaoImpl();
    PhotoService photoService = new PhotoServiceImpl(photoDao);

    String json = JSON.toJSONString(photoService.getAllPhotos());

    out.println("{\"code\":" + result.getCode() + ",\"msg\":\"\",\"count\":" + result.getCount() + ",\"data\":" + json + "}");
%>

detail.jsp

<%@ page import="top.sehnsucht.service.PhotoService" %>
<%@ page import="top.sehnsucht.service.impl.PhotoServiceImpl" %>
<%@ page import="top.sehnsucht.vo.Photo" %>
<%@ page import="top.sehnsucht.dao.PhotoDao" %>
<%@ page import="top.sehnsucht.dao.impl.PhotoDaoImpl" %>
<%--
  Created by IntelliJ IDEA.
  User: windows
  Date: 2021/10/29
  Time: 10:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        img {
            width: 100%;
            height: 100%;
        }
    </style>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
    <script src="${pageContext.request.contextPath}/layui/layui.js"></script>
    <script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
</head>
<body>

<img id="img" alt="picture" src="">

<script>
    <%
        PhotoDao photoDao = new PhotoDaoImpl();
        PhotoService photoService = new PhotoServiceImpl(photoDao);
        Integer id = Integer.valueOf(request.getParameter("id"));
        Photo photo = photoService.selectPhotoById(id);
        System.out.println(photo);
        out.print("$(\"#img\").attr(\"src\", \"" + photo.getPhotourl() + "\")\n");
    %>
</script>
</body>
</html>

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: windows
  Date: 2021/10/29
  Time: 10:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上傳</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
    <script src="${pageContext.request.contextPath}/layui/layui.js"></script>
    <script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
    <style>
        body {
            text-align: center;
        }
    </style>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/upload" enctype="multipart/form-data" class="layui-form">
    <br/><br/>
    <input type="file" name="uploadFile"  class="layui-btn" value="添加檔案"/><button class="layui-btn" lay-submit lay-filter="*">上傳</button>
    <br/><br/>
</form>
</body>
</html>

list.jsp

<%--
  Created by IntelliJ IDEA.
  User: windows
  Date: 2021/10/29
  Time: 10:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>串列</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css">
    <script src="${pageContext.request.contextPath}/layui/layui.js"></script>
    <script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
</head>
<body>

<div style="border-radius: 5px;margin-top: 100px;margin-left: 600px;margin-right: 600px">
    <table id="demo" lay-filter="table-pic-filter"></table>
</div>

<script type="text/html" id="col-pic-toolbar">
    <a class="layui-btn layui-btn-xs" lay-event="look">查看</a>
</script>
<script>
    layui.use('table', function () {
        var table = layui.table;

        table.render({
            elem: '#demo'
            , height: 312
            , url: '/data.jsp' //資料介面
            , page: false //關閉分頁
            , cols: [[ //表頭
                {field: 'id', title: 'id', width: 100, sort: true, fixed: 'left'}
                , {field: 'name', title: 'name', width: 350}
                , {title: '操作', align: 'center', toolbar: '#col-pic-toolbar'}
            ]]
        });

        table.on('tool(table-pic-filter)', function (obj) {
            let data = obj.data;
            // alert(obj.data.name)
            let layEvent = obj.event;
            if (layEvent === 'look') {
                console.log(data.name)
                console.log("list id: " + data.id);
                sessionStorage.setItem("id", data.id)
                let url = '/transfer.jsp'
                layer.open({
                    type: 2,
                    title: "查看圖片",
                    area: ['60%', '60%'],
                    shadeClose: true,
                    content: url
                });
            }
        });
    });
</script>
</body>
</html>

transfer.jsp

<%--
  Created by IntelliJ IDEA.
  User: windows
  Date: 2021/11/6
  Time: 12:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/js/jquery-3.6.0.js"></script>
</head>
<body>
<form action="detail.jsp">
    <label for="id"></label><input type="text" name="id" id="id">
</form>
<script>
    $(document).ready(function () {
        let id = sessionStorage.getItem("id")
        console.log("id: " + id)
        $("#id").attr("value", id)
        console.log("val: " + $("#id").attr("value"))
        $("form").submit()
    })
</script>
</body>
</html>

servlet

JDBCservlet

package top.sehnsucht;

import top.sehnsucht.dao.PhotoDao;
import top.sehnsucht.dao.impl.PhotoDaoImpl;
import top.sehnsucht.service.PhotoService;
import top.sehnsucht.service.impl.PhotoServiceImpl;
import top.sehnsucht.util.Qiniu;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;


public class JDBCServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //todo 存盤到資料庫里面
        PhotoDao photoDao = new PhotoDaoImpl();
        PhotoService photoService = new PhotoServiceImpl(photoDao);

        String filename = (String) req.getAttribute("filename");
        String filepath = (String) req.getAttribute("filepath");
        String fileurl = (String) req.getAttribute("fileurl");

        photoService.addPhoto(filename, fileurl);

        req.getRequestDispatcher("/list.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

UploadServlet

package top.sehnsucht;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import top.sehnsucht.util.Qiniu;

import javax.servlet.ServletException;
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.util.Iterator;
import java.util.List;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/10/29
 */

public class UploadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html; charset=UTF-8");
        //判斷檔案是否可以上傳
        boolean isMultipart = ServletFileUpload.isMultipartContent(req);
        //可以上傳,有問題就報例外
        if (isMultipart) {
            //創建一個FileItem工廠,通過工廠創建檔案上傳核心組件ServletFileUpload物件
            ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
            try {
                //通過核心上傳組件決議request請求,獲取表單的所有表單項,表單的每一個表單項對應一個FileItem
                List<FileItem> items = upload.parseRequest(req);
                Iterator<FileItem> it = items.iterator();
                for (FileItem item : items) {
                    if (item.isFormField()) {
                        System.out.println("其他型別檔案");
                    } else {
                        String filename = item.getName();
                        String path = req.getSession().getServletContext().getRealPath("/") + "\\1";
                        File file = new File(path);
                        if (!file.exists()) {
                            file.mkdirs();
                        }
                        file = new File(path, filename);
                        item.write(file);
                        System.out.println(filename + "上傳成功");

                        Qiniu.uploadPic(filename,path + "\\" + filename);
                        System.out.println("圖片地址為:" + Qiniu.picUrl());

                        req.setAttribute("filename",filename);
                        req.setAttribute("filepath",path + "\\" + filename);
                        req.setAttribute("fileurl",Qiniu.picUrl());

                        System.out.println("七牛云上傳成功");

                        req.getRequestDispatcher("/jdbc").forward(req, resp);
                        return;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

資料庫

create table photo (
    id int not null auto_increment primary key ,
#     groupid int comment '組名',
    name varchar(50) comment '圖片名稱',
    photourl varchar(200) comment '照片路徑'
)
default charset = utf8;

依賴

有些可能沒用到

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>RELEASE</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.18</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.1</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>7.7.0</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

如果需要原始碼的,請點擊這里:要收取積分的哦

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/350979.html

標籤:其他

上一篇:jQuery Ajax 和 axios Ajax

下一篇:Servlet實作前后端json資料互動,前端js傳輸資料,后端fastjson決議json資料,以及Tomcat部署和jquery的部署

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more