From 8b6cec51ab760c578eaaca8c798a6d03ae23d3ca Mon Sep 17 00:00:00 2001
From: Hellohao <923453645@qq.com>
Date: Sun, 16 Jun 2019 04:06:24 +0800
Subject: [PATCH] =?UTF-8?q?6-16=E6=9B=B4=E6=96=B0=20=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E6=9B=B4=E5=A4=9A=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sql/picturebed.sql | 29 +-
.../hellohao/controller/AdminController.java | 16 +-
.../controller/UpdateImgController.java | 36 +-
.../cn/hellohao/dao/UploadConfigMapper.java | 10 +
src/main/java/cn/hellohao/pojo/Config.java | 1 +
.../java/cn/hellohao/pojo/UploadConfig.java | 60 +
.../hellohao/service/UploadConfigService.java | 10 +
.../hellohao/service/impl/OSSImageupload.java | 1 +
.../service/impl/UploadConfigServiceImpl.java | 24 +
.../java/cn/hellohao/test/DownloadImage.java | 71 +
.../cn/hellohao/test/DownloadPicFromURL.java | 42 +
.../java/cn/hellohao/test/xiazaitupian.java | 9 +
src/main/resources/application.properties | 4 +-
src/main/resources/mapper/ConfigMapper.xml | 2 +-
.../resources/mapper/UploadConfigMapper.xml | 33 +
.../resources/static/webuploade/Uploader.swf | Bin 0 -> 143099 bytes
.../resources/static/webuploade/css/style.css | 417 +
.../static/webuploade/css/webuploader.css | 28 +
.../static/webuploade/expressInstall.swf | Bin 0 -> 756 bytes
.../static/webuploade/images/ajax-loader.gif | Bin 0 -> 1569 bytes
.../resources/static/webuploade/images/bg.png | Bin 0 -> 2851 bytes
.../static/webuploade/images/icons.png | Bin 0 -> 2678 bytes
.../static/webuploade/images/image.png | Bin 0 -> 1672 bytes
.../static/webuploade/images/progress.png | Bin 0 -> 1269 bytes
.../static/webuploade/images/success.png | Bin 0 -> 1621 bytes
.../resources/static/webuploade/js/jquery.js | 4 +
.../resources/static/webuploade/js/upload.js | 618 ++
.../static/webuploade/js/webuploader.js | 8106 +++++++++++++++++
src/main/resources/templates/admin/index.html | 1 -
.../templates/admin/storageconfig.html | 48 +-
src/main/resources/templates/admin/user.html | 7 +-
.../resources/templates/admin/webconfig.html | 76 +-
src/main/resources/templates/header.html | 10 +-
.../resources/templates/index_upload.html | 477 +
34 files changed, 10085 insertions(+), 55 deletions(-)
create mode 100644 src/main/java/cn/hellohao/dao/UploadConfigMapper.java
create mode 100644 src/main/java/cn/hellohao/pojo/UploadConfig.java
create mode 100644 src/main/java/cn/hellohao/service/UploadConfigService.java
create mode 100644 src/main/java/cn/hellohao/service/impl/UploadConfigServiceImpl.java
create mode 100644 src/main/java/cn/hellohao/test/DownloadImage.java
create mode 100644 src/main/java/cn/hellohao/test/DownloadPicFromURL.java
create mode 100644 src/main/java/cn/hellohao/test/xiazaitupian.java
create mode 100644 src/main/resources/mapper/UploadConfigMapper.xml
create mode 100644 src/main/resources/static/webuploade/Uploader.swf
create mode 100644 src/main/resources/static/webuploade/css/style.css
create mode 100644 src/main/resources/static/webuploade/css/webuploader.css
create mode 100644 src/main/resources/static/webuploade/expressInstall.swf
create mode 100644 src/main/resources/static/webuploade/images/ajax-loader.gif
create mode 100644 src/main/resources/static/webuploade/images/bg.png
create mode 100644 src/main/resources/static/webuploade/images/icons.png
create mode 100644 src/main/resources/static/webuploade/images/image.png
create mode 100644 src/main/resources/static/webuploade/images/progress.png
create mode 100644 src/main/resources/static/webuploade/images/success.png
create mode 100644 src/main/resources/static/webuploade/js/jquery.js
create mode 100644 src/main/resources/static/webuploade/js/upload.js
create mode 100644 src/main/resources/static/webuploade/js/webuploader.js
create mode 100644 src/main/resources/templates/index_upload.html
diff --git a/sql/picturebed.sql b/sql/picturebed.sql
index aeaf20e..c5469cc 100644
--- a/sql/picturebed.sql
+++ b/sql/picturebed.sql
@@ -11,7 +11,7 @@
Target Server Version : 50720
File Encoding : 65001
- Date: 13/06/2019 15:36:38
+ Date: 16/06/2019 03:35:29
*/
SET NAMES utf8mb4;
@@ -39,7 +39,7 @@ CREATE TABLE `config` (
-- ----------------------------
-- Records of config
-- ----------------------------
-INSERT INTO `config` VALUES (1, 1, 1, 'Hellohao图床', '网站由JAVA语言编写应用SpringBoot框架开发,前端全部组件由BootStrap/Layui框架编写。由作者个人更新维护,后期会加入更全面的功能供大家使用,如有BUG请与我反馈。', 'https://hellohao.nos-eastchina1.126.net/%E7%BD%91%E7%AB%99%E7%B4%A0%E6%9D%90/logo2.png', 'Hellohao 切勿上传违反中华人民共和国互联网法律条约资源', '
作者博客高清壁纸json格式化', '系统更改存储源,大大优化图片访问速度,同时已经开启图片鉴黄检测,对于任何恶意使用永久禁封,请各位合理使用本站资源。', 'console.log(\'百度统计JS代码\');', NULL);
+INSERT INTO `config` VALUES (1, 1, 1, 'Hellohao图床', '网站由JAVA语言编写应用SpringBoot框架开发,前端全部组件由BootStrap/Layui框架编写。由作者个人更新维护,后期会加入更全面的功能供大家使用,如有BUG请与我反馈。', 'https://hellohao.nos-eastchina1.126.net/%E7%BD%91%E7%AB%99%E7%B4%A0%E6%9D%90/logo2.png', 'Hellohao 切勿上传违反中华人民共和国互联网法律条约资源', '作者博客高清壁纸json格式化', '', 'console.log(\'百度统计JS代码\');', NULL);
-- ----------------------------
-- Table structure for emailconfig
@@ -75,7 +75,7 @@ CREATE TABLE `imgdata` (
`abnormal` int(2) NULL DEFAULT NULL COMMENT '异常',
`source` int(2) NULL DEFAULT NULL COMMENT '存储源',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 158 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
+) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Table structure for imgreview
@@ -109,7 +109,7 @@ CREATE TABLE `keys` (
`RequestAddress` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`storageType` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
+) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of keys
@@ -128,6 +128,25 @@ CREATE TABLE `notice` (
`text` varchar(10000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
+-- ----------------------------
+-- Table structure for uploadconfig
+-- ----------------------------
+DROP TABLE IF EXISTS `uploadconfig`;
+CREATE TABLE `uploadconfig` (
+ `id` int(2) NOT NULL AUTO_INCREMENT,
+ `filesizetourists` int(10) NULL DEFAULT NULL COMMENT '游客上传文件最大',
+ `filesizeuser` int(10) NULL DEFAULT NULL COMMENT '用户上传文件最大',
+ `imgcounttourists` int(10) NULL DEFAULT NULL COMMENT '游客文件总数量, 超出则不允许加入队列',
+ `imgcountuser` int(10) NULL DEFAULT NULL COMMENT '用户文件总数量, 超出则不允许加入队列',
+ `suffix` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支持后缀',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of uploadconfig
+-- ----------------------------
+INSERT INTO `uploadconfig` VALUES (1, 3, 5, 1, 5, 'gif,jpg,jpeg,bmp,png');
+
-- ----------------------------
-- Table structure for user
-- ----------------------------
@@ -142,7 +161,7 @@ CREATE TABLE `user` (
`uid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户唯一标识',
`isok` int(2) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of user
diff --git a/src/main/java/cn/hellohao/controller/AdminController.java b/src/main/java/cn/hellohao/controller/AdminController.java
index 6df700e..f5574ef 100644
--- a/src/main/java/cn/hellohao/controller/AdminController.java
+++ b/src/main/java/cn/hellohao/controller/AdminController.java
@@ -37,6 +37,8 @@ public class AdminController {
private ConfigService configService;
@Autowired
private EmailConfigService emailConfigService;
+ @Autowired
+ private UploadConfigService updateConfigService;
@RequestMapping(value = "/goadmin")
@@ -229,7 +231,7 @@ public class AdminController {
Integer count = 0;
if (ret > 0) {
jsonObject.put("usercount", imgService.countimg(u.getId()));
- jsonObject.put("count", imgService.counts(null) + 1000);
+ jsonObject.put("count", imgService.counts(null));
count = 1;
} else {
count = 0;
@@ -348,15 +350,16 @@ public class AdminController {
@RequestMapping(value = "/root/towebconfig")
public String towebconfig(Model model) {
Config config = configService.getSourceype();
+ UploadConfig updateConfig = updateConfigService.getUpdateConfig();
model.addAttribute("config",config);
+ model.addAttribute("updateConfig",updateConfig);
return "admin/webconfig";
}
//修改站点配置
@PostMapping("/root/updateconfig")
@ResponseBody
- public Integer updateconfig(HttpSession session, String webname,String explain, String logos,
+ public Integer updateconfig(String webname,String explain, String logos,
String footed, String links, String notice,String baidu,String domain ) {
- System.err.println("域名=="+domain);
Config config = new Config();
config.setWebname(webname);
config.setExplain(explain);
@@ -369,6 +372,13 @@ public class AdminController {
Integer ret = configService.setSourceype(config);
return ret;
}
+ //修改上传配置
+ @PostMapping("/root/scconfig")
+ @ResponseBody
+ public Integer scconfig(UploadConfig updateConfig) {
+ Integer ret = updateConfigService.setUpdateConfig(updateConfig);
+ return ret;
+ }
@GetMapping(value = "/images/{id}")
@ResponseBody
diff --git a/src/main/java/cn/hellohao/controller/UpdateImgController.java b/src/main/java/cn/hellohao/controller/UpdateImgController.java
index 95e7326..e338dd5 100644
--- a/src/main/java/cn/hellohao/controller/UpdateImgController.java
+++ b/src/main/java/cn/hellohao/controller/UpdateImgController.java
@@ -1,10 +1,7 @@
package cn.hellohao.controller;
-import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.hellohao.pojo.*;
import cn.hellohao.service.*;
@@ -37,11 +34,22 @@ public class UpdateImgController {
private OSSImageupload ossImageupload;
@Autowired
private ConfigService configService;
+ @Autowired
+ private UploadConfigService uploadConfigService;
@RequestMapping({"/", "/index"})
- public String indexImg(Model model, HttpServletRequest request, HttpSession httpSession) throws Exception {
+ public String indexImg(Model model, HttpSession httpSession) {
Config config = configService.getSourceype();//查询当前系统使用的存储源类型。
+ UploadConfig uploadConfig = uploadConfigService.getUpdateConfig();
+ Integer filesizetourists = 0;
+ Integer filesizeuser = 0;
+ Integer imgcounttourists = 0;
+ Integer imgcountuser = 0;
+ if(uploadConfig.getFilesizetourists()!=null){filesizetourists = uploadConfig.getFilesizetourists();}
+ if(uploadConfig.getFilesizeuser()!=null){filesizeuser = uploadConfig.getFilesizeuser();}
+ if(uploadConfig.getImgcounttourists()!=null){imgcounttourists = uploadConfig.getImgcounttourists();}
+ if(uploadConfig.getImgcountuser()!=null){imgcountuser = uploadConfig.getImgcountuser();}
Keys key = keysService.selectKeys(config.getSourcekey());//然后根据类型再查询key
Boolean b = StringUtils.doNull(key);//判断对象是否有空值
if(b)
@@ -62,7 +70,6 @@ public class UpdateImgController {
}
}
}
-
User u = (User) httpSession.getAttribute("user");
String email = (String) httpSession.getAttribute("email");
if (email != null) {
@@ -73,27 +80,29 @@ public class UpdateImgController {
model.addAttribute("username", user.getUsername());
model.addAttribute("level", user.getLevel());
model.addAttribute("loginid", 100);
- model.addAttribute("imgcount", 3);
- model.addAttribute("fileSize", 5120);
+ model.addAttribute("imgcount", imgcountuser);
+ model.addAttribute("filesize", filesizeuser*1024*1024);
} else {
model.addAttribute("loginid", -1);
- model.addAttribute("imgcount", 1);
+ model.addAttribute("imgcount", imgcounttourists);
}
} else {
model.addAttribute("loginid", -2);
- model.addAttribute("imgcount", 1);
- model.addAttribute("fileSize", 3072);
+ model.addAttribute("imgcount", imgcounttourists);
+ model.addAttribute("filesize", filesizetourists*1024*1024);
}
+ model.addAttribute("suffix", uploadConfig.getSuffix());
model.addAttribute("config", config);
- return "index";
+ model.addAttribute("uploadConfig", uploadConfig);
+ return "index_upload";
}
@RequestMapping(value = "/upimg")
@ResponseBody
- public String upimg(HttpServletRequest request, HttpServletResponse response, HttpSession session
+ public String upimg( HttpSession session
, @RequestParam(value = "file", required = false) MultipartFile[] file) throws Exception {
Config config = configService.getSourceype();//查询当前系统使用的存储源类型。
JSONArray jsonArray = new JSONArray();
@@ -166,7 +175,7 @@ public class UpdateImgController {
// JianHuangThread thread = new JianHuangThread(imgreviewService, key, u, m);
// thread.start();
// }
-
+ System.err.println("上传后返回值:"+jsonArray.toString());
return jsonArray.toString();
}
@@ -181,4 +190,5 @@ public class UpdateImgController {
}
+
}
diff --git a/src/main/java/cn/hellohao/dao/UploadConfigMapper.java b/src/main/java/cn/hellohao/dao/UploadConfigMapper.java
new file mode 100644
index 0000000..aac8844
--- /dev/null
+++ b/src/main/java/cn/hellohao/dao/UploadConfigMapper.java
@@ -0,0 +1,10 @@
+package cn.hellohao.dao;
+
+import cn.hellohao.pojo.UploadConfig;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UploadConfigMapper {
+ UploadConfig getUpdateConfig();
+ Integer setUpdateConfig(UploadConfig uploadConfig);
+}
diff --git a/src/main/java/cn/hellohao/pojo/Config.java b/src/main/java/cn/hellohao/pojo/Config.java
index be16aaf..c4f6fe6 100644
--- a/src/main/java/cn/hellohao/pojo/Config.java
+++ b/src/main/java/cn/hellohao/pojo/Config.java
@@ -13,6 +13,7 @@ public class Config {
private String baidu;
private String domain;
+
public Config() {
}
diff --git a/src/main/java/cn/hellohao/pojo/UploadConfig.java b/src/main/java/cn/hellohao/pojo/UploadConfig.java
new file mode 100644
index 0000000..60b78c3
--- /dev/null
+++ b/src/main/java/cn/hellohao/pojo/UploadConfig.java
@@ -0,0 +1,60 @@
+package cn.hellohao.pojo;
+
+public class UploadConfig {
+ private String suffix;
+ private Integer filesizetourists;
+ private Integer filesizeuser;
+ private Integer imgcounttourists;
+ private Integer imgcountuser;
+
+ public UploadConfig() {
+ }
+
+ public UploadConfig(String suffix, Integer filesizetourists, Integer filesizeuser, Integer imgcounttourists, Integer imgcountuser) {
+ this.suffix = suffix;
+ this.filesizetourists = filesizetourists;
+ this.filesizeuser = filesizeuser;
+ this.imgcounttourists = imgcounttourists;
+ this.imgcountuser = imgcountuser;
+ }
+
+ public String getSuffix() {
+ return suffix;
+ }
+
+ public void setSuffix(String suffix) {
+ this.suffix = suffix;
+ }
+
+ public Integer getFilesizetourists() {
+ return filesizetourists;
+ }
+
+ public void setFilesizetourists(Integer filesizetourists) {
+ this.filesizetourists = filesizetourists;
+ }
+
+ public Integer getFilesizeuser() {
+ return filesizeuser;
+ }
+
+ public void setFilesizeuser(Integer filesizeuser) {
+ this.filesizeuser = filesizeuser;
+ }
+
+ public Integer getImgcounttourists() {
+ return imgcounttourists;
+ }
+
+ public void setImgcounttourists(Integer imgcounttourists) {
+ this.imgcounttourists = imgcounttourists;
+ }
+
+ public Integer getImgcountuser() {
+ return imgcountuser;
+ }
+
+ public void setImgcountuser(Integer imgcountuser) {
+ this.imgcountuser = imgcountuser;
+ }
+}
diff --git a/src/main/java/cn/hellohao/service/UploadConfigService.java b/src/main/java/cn/hellohao/service/UploadConfigService.java
new file mode 100644
index 0000000..c727e26
--- /dev/null
+++ b/src/main/java/cn/hellohao/service/UploadConfigService.java
@@ -0,0 +1,10 @@
+package cn.hellohao.service;
+
+import cn.hellohao.pojo.UploadConfig;
+import org.springframework.stereotype.Service;
+
+@Service
+public interface UploadConfigService {
+ UploadConfig getUpdateConfig();
+ Integer setUpdateConfig(UploadConfig updateConfig);
+}
diff --git a/src/main/java/cn/hellohao/service/impl/OSSImageupload.java b/src/main/java/cn/hellohao/service/impl/OSSImageupload.java
index 835c711..5a43f58 100644
--- a/src/main/java/cn/hellohao/service/impl/OSSImageupload.java
+++ b/src/main/java/cn/hellohao/service/impl/OSSImageupload.java
@@ -45,6 +45,7 @@ public class OSSImageupload {
}
meta.setHeader("Content-Type", head);//image/jpeg
// 上传文件流。
+ System.out.println("待上传的图片:"+username + "/" + uuid+times + "." + entry.getKey());
ossClient.putObject(key.getBucketname(), username + "/" + uuid+times + "." + entry.getKey(),file,meta);
// 关闭OSSClient。
//ossClient.shutdown();
diff --git a/src/main/java/cn/hellohao/service/impl/UploadConfigServiceImpl.java b/src/main/java/cn/hellohao/service/impl/UploadConfigServiceImpl.java
new file mode 100644
index 0000000..c01a1e6
--- /dev/null
+++ b/src/main/java/cn/hellohao/service/impl/UploadConfigServiceImpl.java
@@ -0,0 +1,24 @@
+package cn.hellohao.service.impl;
+
+import cn.hellohao.dao.UploadConfigMapper;
+import cn.hellohao.pojo.UploadConfig;
+import cn.hellohao.service.UploadConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UploadConfigServiceImpl implements UploadConfigService {
+ @Autowired
+ private UploadConfigMapper uploadConfigMapper;
+
+ @Override
+ public UploadConfig getUpdateConfig() {
+ return uploadConfigMapper.getUpdateConfig();
+ }
+
+ @Override
+ public Integer setUpdateConfig(UploadConfig uploadConfig) {
+ return uploadConfigMapper.setUpdateConfig(uploadConfig);
+ }
+}
+
diff --git a/src/main/java/cn/hellohao/test/DownloadImage.java b/src/main/java/cn/hellohao/test/DownloadImage.java
new file mode 100644
index 0000000..ff6dc95
--- /dev/null
+++ b/src/main/java/cn/hellohao/test/DownloadImage.java
@@ -0,0 +1,71 @@
+package cn.hellohao.test;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.activation.MimetypesFileTypeMap;
+import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
+
+
+public class DownloadImage {
+
+ /**
+ * @param args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ // TODO Auto-generated method stub
+ download("http://ui.51bi.com/opt/siteimg/images/fanbei0923/Mid_07.jpg", "51bi.gif","c:\\image\\");
+ }
+
+ public static void download(String urlString, String filename,String savePath) throws Exception {
+ // 构造URL
+ URL url = new URL(urlString);
+ // 打开连接
+ URLConnection con = url.openConnection();
+ //设置请求超时为5s
+ con.setConnectTimeout(5*1000);
+ // 输入流
+ InputStream is = con.getInputStream();
+
+ // 1K的数据缓冲
+ byte[] bs = new byte[1024];
+ // 读取到的数据长度
+ int len;
+ // 输出的文件流
+ File sf=new File(savePath);
+ System.out.println("==="+sf.length());
+ if(!sf.exists()){
+ sf.mkdirs();
+ }
+
+ DownloadImage d = new DownloadImage();
+
+ System.out.println(d.isImage(sf));
+ OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename);
+ // 开始读取
+ while ((len = is.read(bs)) != -1) {
+ os.write(bs, 0, len);
+ }
+ // 完毕,关闭所有链接
+ os.close();
+ is.close();
+ }
+ private MimetypesFileTypeMap mtftp;
+
+ public DownloadImage(){
+ mtftp = new MimetypesFileTypeMap();
+ /* 不添加下面的类型会造成误判 详见:http://stackoverflow.com/questions/4855627/java-mimetypesfiletypemap-always-returning-application-octet-stream-on-android-e*/
+ mtftp.addMimeTypes("image png tif jpg jpeg bmp");
+ }
+ public boolean isImage(File file){
+ String mimetype= mtftp.getContentType(file);
+ String type = mimetype.split("/")[0];
+ return type.equals("image");
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/cn/hellohao/test/DownloadPicFromURL.java b/src/main/java/cn/hellohao/test/DownloadPicFromURL.java
new file mode 100644
index 0000000..834559c
--- /dev/null
+++ b/src/main/java/cn/hellohao/test/DownloadPicFromURL.java
@@ -0,0 +1,42 @@
+package cn.hellohao.test;
+
+import org.apache.http.impl.io.IdentityInputStream;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class DownloadPicFromURL {
+ public static void main(String[] args) {
+ String url = "https://hellohao.oss-cn-beijing.aliyuncs.com/Hellohao/0efe60609092414.png";
+ String path="D:\\apps\\pic.jpg";
+ downloadPicture(url,path);
+ }
+ //链接url下载图片
+ private static void downloadPicture(String urlList,String path) {
+ URL url = null;
+ try {
+ url = new URL(urlList);
+ DataInputStream dataInputStream = new DataInputStream(url.openStream());
+
+
+ FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+ byte[] buffer = new byte[1024];
+ int length;
+
+ while ((length = dataInputStream.read(buffer)) > 0) {
+ output.write(buffer, 0, length);
+ }
+ fileOutputStream.write(output.toByteArray());
+ dataInputStream.close();
+ fileOutputStream.close();
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cn/hellohao/test/xiazaitupian.java b/src/main/java/cn/hellohao/test/xiazaitupian.java
new file mode 100644
index 0000000..6eafb98
--- /dev/null
+++ b/src/main/java/cn/hellohao/test/xiazaitupian.java
@@ -0,0 +1,9 @@
+package cn.hellohao.test;
+
+import java.io.DataInputStream;
+import java.net.URL;
+import java.util.stream.Stream;
+
+public class xiazaitupian {
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8a97602..999cd75 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,8 +1,8 @@
-#ݿ˺
+#ݿ˺picturebed
spring.datasource.username=root
#ݿ
spring.datasource.password=root
-#ݿַ
+#ݿӵַ
spring.datasource.url=jdbc:mysql://localhost:3306/picturebed?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#˿
server.port=8088
diff --git a/src/main/resources/mapper/ConfigMapper.xml b/src/main/resources/mapper/ConfigMapper.xml
index 87c3301..6e45713 100644
--- a/src/main/resources/mapper/ConfigMapper.xml
+++ b/src/main/resources/mapper/ConfigMapper.xml
@@ -37,7 +37,7 @@
`baidu` = #{baidu},
- `domain` = #{domain}
+ `domain` = #{domain},
diff --git a/src/main/resources/mapper/UploadConfigMapper.xml b/src/main/resources/mapper/UploadConfigMapper.xml
new file mode 100644
index 0000000..f3be218
--- /dev/null
+++ b/src/main/resources/mapper/UploadConfigMapper.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ UPDATE uploadconfig
+
+
+ `filesizetourists` = #{filesizetourists},
+
+
+ `filesizeuser` = #{filesizeuser},
+
+
+ `imgcounttourists` = #{imgcounttourists},
+
+
+ `imgcountuser` = #{imgcountuser},
+
+
+ `suffix` = #{suffix}
+
+
+
+ where id=1
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/webuploade/Uploader.swf b/src/main/resources/static/webuploade/Uploader.swf
new file mode 100644
index 0000000000000000000000000000000000000000..bd75d6082fc0c3e977390a71dcca78932727147c
GIT binary patch
literal 143099
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