thumbnailator压缩图片并上传文件服务器

1.引入pom

  <!--thumbnailator 压缩工具-->
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>
<!--        thumbnailator 压缩工具-->

2.核心代码

//上传文件的字节数组
byte[] bytes = multipartFile.getBytes();
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes.length);
     
                Thumbnails.of(file1)
                        .scale(1f)//缩放比例,1表示原比例
                        .outputQuality(0.01f)//图片质量
                        .toOutputStream(outputStream);//输出流
                bytes = outputStream.toByteArray();//获得字节数组
                //bytes:压缩后的字节数组,imagePath:图片上传路径,filename:文件名,upUrl:文件服务器地址
               //上传到文件服务器
                UploadUtil.upload(bytes,imagePath,filename,upUrl);

3.UploadUtil

public class UploadUtil {
	/**
	 * @param file  上传的文件
	 * @param upUrl 上传的接口(文件服务器接口)
	 * @return 返回json数量
	 */
	public static String upload(File file, String path, String upUrl) {
		// 声明参数集合
		HashMap<String, Object> paramMap = new HashMap<>();
		// 文件
		paramMap.put("file", file);
		// 输出
		paramMap.put("output", "json");
		// 自定义路径
		paramMap.put("path", path);
		// 场景
		paramMap.put("scene", "image");
		// 上传
		String result = HttpUtil.post(upUrl, paramMap);
		// 输出json结果
		System.out.println(result);
		return result;
	}

	/**
	 * @param data     文件数据
	 * @param path     文件目录(如:31090000001320000002/src)
	 * @param filename 文件名称(如:31090000001320000002.jpg)
	 * @param upUrl    文件服务器接口
	 * @return 返回json数量(其中包含文件下载访问路径)
	 */
	public static String upload(byte[] data, String path, String filename, String upUrl) {
		InputStream in = new ByteArrayInputStream(data);
		InputStreamResource irs = new InputStreamResource(in, filename);
		// File file = new File(path);
		// 声明参数集合
		HashMap<String, Object> paramMap = new HashMap<>();
		// 文件
		paramMap.put("file", irs);
		// 输出
		paramMap.put("output", "json");
		// 自定义路径
		paramMap.put("path", path);
		// 场景
		paramMap.put("scene", "image");
		// 上传
		String result = HttpUtil.post(upUrl, paramMap);
		// 输出json结果
		System.out.println(result);
		return result;
	}

	/**
	 * 断点续传
	 * 
	 * @return
	 */
	public static String tusUpload(File file, String bigUpUrl) {
		Map<String, Object> map = new HashMap<>();
		try {
			System.setProperty("http.strictPostRedirect", "true");
			final TusClient client = new TusClient();
			// client.setUploadCreationURL(new URL("http://112.0.170.178:8205/big/upload"));
			client.setUploadCreationURL(new URL(bigUpUrl));
			client.enableResuming(new TusURLMemoryStore());
			// File file = new File("./example/assets/prairie.jpg");
			final TusUpload upload = new TusUpload(file);
			System.out.println("Starting upload...");
			TusExecutor executor = new TusExecutor() {
				@Override
				protected void makeAttempt() throws ProtocolException, IOException {
					TusUploader uploader = client.resumeOrCreateUpload(upload);
					uploader.setChunkSize(1024);
					do {
						long totalBytes = upload.getSize();
						long bytesUploaded = uploader.getOffset();
						double progress = (double) bytesUploaded / totalBytes * 100;
						System.out.printf("Upload at %06.2f%%.\n", progress);
					} while (uploader.uploadChunk() > -1);
					uploader.finish();
					System.out.println("Upload finished.");
					System.out.format("Upload available at: %s", uploader.getUploadURL().toString());
					map.put("url", uploader.getUploadURL().toString());
				}
			};
			executor.makeAttempts();
			map.put("code", 0);
			map.put("msg", "成功");
			return JSONUtil.toJsonStr(map);
		} catch (Exception e) {
			e.printStackTrace();
			map.put("code", -1);
			map.put("msg", "失败》》》" + e.getMessage());
			return JSONUtil.toJsonStr(map);
		}
	}
	
	/**
     * 根据图片路径,把图片转为byte数组
     * @param Path  图片路径
     * @return      byte[]
     */
    public static byte[] imageBytes(String imgSrc)  
    {  
        FileInputStream fin;
        byte[] bytes = null;
		try {
			fin = new FileInputStream(new File(imgSrc));
			bytes  = new byte[fin.available()];  
	        //将文件内容写入字节数组
	        fin.read(bytes);  
	        fin.close();  
		} catch (Exception e) {
			e.printStackTrace();
		}  
        
        return bytes;  
    }  
}

HttpUtil

public class HttpUtils
{
    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
    
    
    
    /**
     * 向指定 URL 发送GET方法的请求
     *
     * @param url 发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param)
    {
        StringBuilder result = new StringBuilder();
        BufferedReader in = null;
        try
        {
            String urlNameString = url + "?" + param;
            log.info("sendGet - {}", urlNameString);
            URL realUrl = new URL(urlNameString);
            URLConnection connection = realUrl.openConnection();
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            connection.connect();
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null)
            {
                result.append(line);
            }
            log.info("recv - {}", result);
        }
        catch (ConnectException e)
        {
            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
        }
        catch (SocketTimeoutException e)
        {
            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
        }
        catch (IOException e)
        {
            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
        }
        catch (Exception e)
        {
            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
        }
        finally
        {
            try
            {
                if (in != null)
                {
                    in.close();
                }
            }
            catch (Exception ex)
            {
                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
            }
        }
        return result.toString();
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url 发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param)
    {
        PrintWriter out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        try
        {
            String urlNameString = url + "?" + param;
            log.info("sendPost - {}", urlNameString);
            URL realUrl = new URL(urlNameString);
            URLConnection conn = realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("contentType", "utf-8");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(conn.getOutputStream());
            out.print(param);
            out.flush();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            String line;
            while ((line = in.readLine()) != null)
            {
                result.append(line);
            }
            log.info("recv - {}", result);
        }
        catch (ConnectException e)
        {
            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
        }
        catch (SocketTimeoutException e)
        {
            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
        }
        catch (IOException e)
        {
            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
        }
        catch (Exception e)
        {
            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
        }
        finally
        {
            try
            {
                if (out != null)
                {
                    out.close();
                }
                if (in != null)
                {
                    in.close();
                }
            }
            catch (IOException ex)
            {
                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
            }
        }
        return result.toString();
    }

    public static String sendSSLPost(String url, String param)
    {
        StringBuilder result = new StringBuilder();
        String urlNameString = url + "?" + param;
        try
        {
            log.info("sendSSLPost - {}", urlNameString);
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
            URL console = new URL(urlNameString);
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("contentType", "utf-8");
            conn.setDoOutput(true);
            conn.setDoInput(true);

            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String ret = "";
            while ((ret = br.readLine()) != null)
            {
                if (ret != null && !ret.trim().equals(""))
                {
                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
                }
            }
            log.info("recv - {}", result);
            conn.disconnect();
            br.close();
        }
        catch (ConnectException e)
        {
            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
        }
        catch (SocketTimeoutException e)
        {
            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
        }
        catch (IOException e)
        {
            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
        }
        catch (Exception e)
        {
            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
        }
        return result.toString();
    }

    private static class TrustAnyTrustManager implements X509TrustManager
    {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType)
        {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType)
        {
        }

        @Override
        public X509Certificate[] getAcceptedIssuers()
        {
            return new X509Certificate[] {};
        }
    }

    private static class TrustAnyHostnameVerifier implements HostnameVerifier
    {
        @Override
        public boolean verify(String hostname, SSLSession session)
        {
            return true;
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值