精华内容
下载资源
问答
  • * 从网络获取图片到本地 */ public class GetImage { /** * 测试 * * @param args */ public static void main(String[] args) { String url = ...
  • PAGE / NUMPAGES java 保存字段blob数据图片到本地 import java.io.BufferedOutputStream; ? import?java.io.FileOutputStream; ? import?java.io.InputStream; ? import?java.sql.Blob; ? import?java.sql....
  • 服务接口 import org.springframework.web.multipart.MultipartFile; /** * 文件服务 * * @author Zhenfeng Li * @version 1.0 ... * 保存/更新图片 * * @param multipartFile 图片 * @param ba

    服务接口

    
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * 文件服务
     *
     * @author Zhenfeng Li
     * @version 1.0
     * @date 2020-11-23 14:17
     */
    public interface FileService {
    
        /**
         * 保存/更新图片
         *
         * @param multipartFile 图片
         * @param basePath      路径
         * @param id            主键Id
         * @param fileName      图片名称
         * @return 保存后的全路径
         * @throws Exception
         */
        String imgSaveOrUpdate(MultipartFile multipartFile, String basePath, Long id, String fileName) throws Exception;
    
        /**
         * 保存/更新图片
         *
         * @param byte64   图片base64
         * @param basePath 路径
         * @param id       主键Id
         * @param fileName 图片名称
         * @return 保存后的全路径
         * @throws Exception
         */
        String imgSaveOrUpdate(String byte64, String basePath, Long id, String fileName) throws Exception;
    
    }
    
    

    服务接口

    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.FileOutputStream;
    
    /**
     * 文件服务
     *
     * @author Zhenfeng Li
     * @version 1.0
     * @date 2020-11-23 14:25
     */
    @Service
    @Slf4j
    public class FileServiceImpl implements FileService {
        /**
         * 图片存储绝对路径
         */
        @Value("${absolute.path}")
        private String absolutePath;
    
        /**
         * 图片服务器域名
         */
        @Value("${img.domain-name}")
        private String imgDomainName;
    
        @Override
        public String imgSaveOrUpdate(MultipartFile multipartFile,String basePath, Long id, String fileName) throws Exception {
            return saveOrUpdate(multipartFile, basePath, id, fileName);
        }
    
        @Override
        public String imgSaveOrUpdate(String byte64,String basePath, Long id, String fileName) throws Exception {
            return saveOrUpdate(byte64, basePath, id, fileName);
        }
    
        /**
         * @param multipartFile 图片文件
         * @param path          路径
         * @param id            用户/商户/商品/司机Id
         * @param fileName      文件存储名称
         * @return 文件保存后的url
         * @throws Exception 目录创建异常
         */
        private String saveOrUpdate(MultipartFile multipartFile, String path, Long id, String fileName) throws Exception {
            String suffix = Utils.getMultipartFileType(multipartFile);
            File file = makeDir(path, id, fileName, suffix);
            multipartFile.transferTo(file);
            return imgDomainName + "/" + path + "/" + id + "/" + fileName + "." + suffix;
        }
    
        /**
         * @param base64   图片base64
         * @param path     路径
         * @param id       用户/商户/商品/司机Id
         * @param fileName 文件存储名称
         * @return 文件保存后的url
         * @throws Exception 目录创建异常
         */
        private String saveOrUpdate(String base64, String path, Long id, String fileName) throws Exception {
            Base64Image base64Image = Base64Image.build(base64);
            byte[] bytes = base64Image.getBytes();
            String suffix = base64Image.getExtName();
            File file = makeDir(path, id, fileName, suffix);
            try (FileOutputStream writer = new FileOutputStream(file)) {
                writer.write(bytes);
            }
            return imgDomainName + "/" + path + "/" + id + "/" + fileName + "." + suffix;
        }
    
        /**
         * 创建目录
         *
         * @param path     文件路径
         * @param id       用户/商户/商品/司机Id
         * @param fileName 文件存储名称
         * @param suffix   文件后缀
         * @return 文件保存后的url
         * @throws Exception 目录创建异常
         */
        private File makeDir(String path, Long id, String fileName, String suffix) throws Exception {
            File file = new File(absolutePath + "/" + path + "/" + id + "/" + fileName + "." + suffix);
            if (!file.getParentFile().exists()) {
                if (!file.getParentFile().mkdirs()) {
                    log.error("目录创建失败,[{}]", file.getPath());
                    throw new Exception("目录创建失败");
                }
            }
            return file;
        }
    }
    
    

    工具类

    
    import lombok.Data;
    
    import java.util.Base64;
    
    /**
     * Base64图片类
     *
     * @author Zhenfeng Li
     * @version 1.0
     * @date 2019-09-23 14:46
     */
    @Data
    public class Base64Image {
        /**
         * 图片数据
         */
        private byte[] bytes;
    
        /**
         * 图片后缀
         */
        private String extName;
    
        private Base64Image(byte[] bytes, String extName) {
            this.bytes = bytes;
            this.extName = extName;
        }
    
        public static Base64Image build(String base64) {
            byte[] bytes = base64ToByte(base64);
            String imgFormat = getImgFormat(base64);
            return new Base64Image(bytes, imgFormat);
        }
    
        /**
         * 图片base64获取图片格式
         */
        private static String getImgFormat(String base64) {
            String[] split = base64.split(",");
            if (split.length < 2) {
                return null;
            }
            if (split[0].toLowerCase().contains("/png")) {
                return "png";
            } else if (split[0].toLowerCase().contains("/jpeg")) {
                return "jpeg";
            } else if (split[0].toLowerCase().contains("/jpg")) {
                return "jpg";
            } else if (split[0].toLowerCase().contains("/gif")) {
                return "gif";
            } else if (split[0].toLowerCase().contains("/bmp")) {
                return "bmp";
            } else if (split[0].toLowerCase().contains("/tiff")) {
                return "tiff";
            }
            return null;
        }
    
        /**
         * 转换图片为byte
         *
         * @param base64 base64字符串
         * @return 返回byte[]
         */
        private static byte[] base64ToByte(String base64) {
            byte[] dataByte = Base64.getDecoder().decode(base64.split(",")[1].replace("\n", "").replace("\r", ""));
            for (int i = 0; i < dataByte.length; ++i) {
                //调整异常数据
                if (dataByte[i] < 0) {
                    dataByte[i] += 256;
                }
            }
            return dataByte;
        }
    }
    
    
    展开全文
  • java下载网络图片到本地保存

    热门讨论 2012-09-16 14:18:36
    java下载网络图片到本地保存,还有一个配置文件,用来配置url和保存地址。
  • java根据图片路径下载图片保存到本地目录
    import java.io.File;  
    import java.io.FileOutputStream;  
    import java.io.InputStream;  
    import java.io.OutputStream;  
    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://avatar.csdn.net/1/3/B/1_li1325169021.jpg", "1_li1325169021.jpg","d:\\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);  
           if(!sf.exists()){  
               sf.mkdirs();  
           }  
           OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename);  
            // 开始读取  
            while ((len = is.read(bs)) != -1) {  
              os.write(bs, 0, len);  
            }  
            // 完毕,关闭所有链接  
            os.close();  
            is.close();  
        }   
      
    }  
    展开全文
  • 一、实现思路 1.使用微信JS-SDK工具包: <...</script> 2.点击a链接,触发click事件调用拍照接口【chooseImage】和上传图片接口【uploadImage】,拿...3.调用后台接口拿返回的图片保存到服务器 ...

    一、实现思路

    1.使用微信JS-SDK工具包: <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

    2.点击a链接,触发click事件调用拍照接口【chooseImage】和上传图片接口【uploadImage】,拿到mediaId

    3.调用后台接口拿到返回的图片流保存到服务器

    官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140&token=&lang=zh_CN

    二、实现步骤

    1.绑定域名

    登录微信公众号平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。(如:xt.lab.cn)

    如果没有测试公众号的话可以通过以下链接去注册一个,并配置JS接口安全域名

    测试号管理:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

     

    在本页面还要配置一下微信认证网页授权,注意授权回调页面域名不带http和www,格式比如 baidu.com

     

    2.在调用摄像头页面引入相关js文件

    <script src="<%=request.getContextPath()%>/staticfile/js/jquery.min.js"></script>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

    3.过congfig接口注入权限验证配置,并添加a链接(用来触发click事件)

    <!-- a链接,触发调用摄像头 -->
    <a href="javascript:" id="takePicture1" style="font-size: 26px">拍照</a>
    
    
    <!-- 通过config接口注入权限验证配置 -->
    <input type="hidden" id="appId" value="${appId }"/>
    <input type="hidden" id="timestamp" value="${timestamp }"/>
    <input type="hidden" id="nonceStr" value="${nonceStr }"/>
    <input type="hidden" id="signature" value="${signature }"/>
    
    <script>
    $(function(){
        wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: $('#appId').val(), // 必填,公众号的唯一标识
            timestamp: $('#timestamp').val(), // 必填,生成签名的时间戳
            nonceStr: $('#nonceStr').val(), // 必填,生成签名的随机串
            signature: $('#signature').val(),// 必填,签名,见附录1
            jsApiList: ['chooseImage', 'uploadImage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
    });
    </script>

     

    4.JS-SDK使用权限签名算法,生成第三步中 config接口 所需参数 
    注意:java代码使用jfinal3.1框架,使用到的缓存插件、参数获取等语法不一致,自适应相应修改。

    获取access_token(官方:有效期7200秒,开发者必须在自己的服务全局缓存access_token)、jsapi_ticket、签名sign
    后台代码:

        /**
         * 初始化信息页面,获取config接口 所需参数 
         * @param request
         * @param modelMap
         * @return
         */
        @RequestMapping("/configDetail")
        public String assessList(HttpServletRequest request, ModelMap modelMap){
            Map<String,String> params = getJsSdk(getJsTicket(),getUrl(request));
            modelMap.put("timestamp",params.get("timestamp"));
            modelMap.put("nonceStr",params.get("nonceStr"));
            modelMap.put("signature",params.get("signature"));
            modelMap.put("appId", WgjConstants.WX_APPID);
            return "/wx/detail.ftl";
        }
    
        /**
         * 保存图片到服务器,返回图片地址
         */
        @RequestMapping(value = "/getLicensePlate")
        @ResponseBody
        public Map getLicensePlate(HttpServletRequest request) throws IOException {
            Map map = new HashMap<>();
            String mediaId = request.getParameter("mediaId");
            // 保存图片到服务器,返回图片地址
            String fileUrl = saveImageToDisk(mediaId );
            map.put("fileUrl",fileUrl);
    
            return map;
        }
    
    
    /**
     * 保存图片至服务器 
     * @param mediaId
     * @return 文件名
     */
    public String saveImageToDisk(String mediaId){
        String filename = "";
        InputStream inputStream = getMedia(mediaId);
        byte[] data = new byte[1024];
        int len = 0;
        FileOutputStream fileOutputStream = null;
        try {
            //服务器存图路径
            String path = PathKit.getWebRootPath() + "/vehicleupload/";
            filename = System.currentTimeMillis() + WeixinSignUtil.getNonceStr() + ".jpg";
            fileOutputStream = new FileOutputStream(path + filename);
            while ((len = inputStream.read(data)) != -1) {
                fileOutputStream.write(data, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileOutputStream != null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return filename;
    }
    
     /**
         * 生成随机串
         */
    public static String getNonceStr() {
    	    String currT = getCurrTime();  
    	    String strT = currT.substring(8, currT.length());  
    	    String strRandom = buildRandom(4) + "";  
    	    return strT + strRandom;
    	}
    
        /**
         * 获取图片流
         */
        private InputStream getMedia(String mediaId) {
            String url = "https://api.weixin.qq.com/cgi-bin/media/get";
            String access_token = getAccessToken();
            String params = "access_token=" + access_token + "&media_id=" + mediaId;
            InputStream is = null;
            try {
                String urlNameString = url + "?" + params;
                URL urlGet = new URL(urlNameString);
                HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
                http.setRequestMethod("GET"); // 必须是get方式请求
                http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
                http.setDoOutput(true);
                http.setDoInput(true);
                http.connect();
                // 获取文件转化为byte流
                is = http.getInputStream();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return is;
        }
    
    
        /**
         * 获取token
         *
         * @return
         */
        public String getAccessToken() {
            Gson gson = new Gson();
            HttpUtil http = new HttpUtil();
            String token_url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
            String tokenParam = http.get(String.format(token_url,"你的APPID","你的SECRET"));
            logger.info("重新请求token:" + tokenParam);
            
            Map param = gson.fromJson(tokenParam, Map.class);
            String val = param.get("access_token").toString();
            logger.info("重新获取到的token:" + val);
            return val;
        }
    
    
        /**
         * 获取ticket
         * @return
         * @throws Exception
         */
        public String getJsTicket() {
            String ticket_url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi";
            String jsTicket = http.get(String.format(ticket_url, getAccessToken()));
            logger.info("重新请求jsTicket:" + jsTicket);
            Map<String, Object> map = gson.fromJson(jsTicket, Map.class);
            String val = map.get("ticket").toString();
            logger.info("重新获取到的ticket:" + val);
            return val;
        }
    
        /**
         * 获取jssdk签名
         *
         * @param jsapiTicket ticket
         * @param url         请求界面的完整url,请去掉url“#”后面的所有字符
         * @return
         */
        public Map<String, String> getJsSdk(String jsapiTicket, String url) {
            Map<String, String> params = new HashMap<String, String>();
            String nonceStr = createNonceStr();
            String timestamp = createTimestamp();
            String string1, signature = "";
            // 注意这里参数名必须全部小写,且必须有序
            string1 = String.format("jsapi_ticket=%s&noncestr=%s&timestamp=%s&url=%s", jsapiTicket, nonceStr, timestamp, url);
            try {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(string1.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            } catch (NoSuchAlgorithmException e) {
                logger.error("NoSuchAlgorithmException", e.getMessage());
            } catch (UnsupportedEncodingException e) {
                logger.error("UnsupportedEncodingException", e.getMessage());
            }
            params.put("url", url);
            params.put("jsapi_ticket", jsapiTicket);
            params.put("nonceStr", nonceStr);
            params.put("timestamp", timestamp);
            params.put("signature", signature);
            return params;
        }
    
        /**
         * 生成签名的时间戳
         *
         * @return
         */
        private static String createTimestamp() {
            return Long.toString(System.currentTimeMillis() / 1000);
        }
    
        /**
         * 生成签名的随机串
         *
         * @return
         */
        private static String createNonceStr() {
            return UUID.randomUUID().toString();
        }
    
        /**
         * 生成签名字符串
         *
         * @param hash
         * @return
         */
        private static String byteToHex(final byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash) {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            formatter.close();
            return result;
        }

    5.调用摄像头,获取mediaid,拿到图片流

    $("#takePicture1").on('click',function(){
            wx.chooseImage({
                count: 1, // 默认9
                sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
                sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
                success: function (res) {
                    var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
                    wx.uploadImage({
                        localId: localIds.toString(), // 需要上传的图片的本地ID,由chooseImage接口获得
                        isShowProgressTips: 1, // 默认为1,显示进度提示
                        success: function (res) {
                            var mediaId = res.serverId; // 返回图片的服务器端ID,即mediaId
                            var params="mediaId="+mediaId;
                            //将获取到的 mediaId 传入后台 getLicensePlate,保存图片到服务器,并返回图片地址
                            $.ajax({
                                type:'post',
                                dataType:'json',
                                data:params,
    //                            url:'/wx/assess/getLicensePlate.json',
                                success:function (d) {
                                    alert(b.fileUrl);
                                },error:function () {
                                }
                            })
                        },
                        fail: function (res) {
                            alertModal('上传图片失败,请重试')
                        }
                    });
                }
            });
          });

    在此代码就编写完成了。

    展开全文
  • 用途:安卓获取图片(如网络头像,本地剪切后的图片)保存到本地指定路径 public class FileUtil { /** * 将Bitmap 图片保存到本地路径,并返回路径 * @param c * @param mType 资源类型,参照...

    用途:安卓获取图片(如网络头像,本地剪切后的图片)保存到本地指定路径

    public class FileUtil {
    /**

    * 将Bitmap 图片保存到本地路径,并返回路径

    * @param c

    * @param mType 资源类型,参照  MultimediaContentType 枚举,根据此类型,保存时可自动归类

    * @param fileName 文件名称

    * @param bitmap 图片

    * @return

    */

    public static String saveFile(Context c, String fileName, Bitmap bitmap) {
    return saveFile(c, "", fileName, bitmap);

    }

    public static String saveFile(Context c, String filePath, String fileName, Bitmap bitmap) {
    byte[] bytes = bitmapToBytes(bitmap);

    return saveFile(c, filePath, fileName, bytes);

    }

    public static byte[] bitmapToBytes(Bitmap bm) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    bm.compress(CompressFormat.JPEG, 100, baos);

    return baos.toByteArray();

    }

    public static String saveFile(Context c, String filePath, String fileName, byte[] bytes) {
    String fileFullName = "";

    FileOutputStream fos = null;

    String dateFolder = new SimpleDateFormat("yyyyMMdd", Locale.CHINA)

    .format(new Date());

    try {
    String suffix = "";

    if (filePath == null || filePath.trim().length() == 0) {
    filePath = Environment.getExternalStorageDirectory() + "/Dingding/" + dateFolder + "/";

    }

    File file = new File(filePath);

    if (!file.exists()) {
    file.mkdirs();

    }

    File fullFile = new File(filePath, fileName + suffix);

    fileFullName = fullFile.getPath();

    fos = new FileOutputStream(new File(filePath, fileName + suffix));

    fos.write(bytes);

    } catch (Exception e) {
    fileFullName = "";

    } finally {
    if (fos != null) {
    try {
    fos.close();

    } catch (IOException e) {
    fileFullName = "";

    }

    }

    }

    return fileFullName;

    }

    }
     

    展开全文
  • java 下载网络图片保存到本地 /** * 下载网络图片 * @param urlList 网络路径 * @param path 保存路径 */ public static void downloadPicture(String urlList,String path) { URL url = null; try { url ...
  • import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; public class DownloadImage { publi...
  • //java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { // 构造URL URL url = new URL(urlString); // 打开连接 URLConnection c...
  • Java下载图片到本地

    千次阅读 2018-11-13 09:56:28
    1、首先页面请求不可以用ajax请求,否则会将信息输出到控制台 var url = "${path}/pc/qrcode/downLoad.do?filename="+ 文件路径 +"... * 下载图片到本地 * @param request * @p...
  • 基于java实现的爬虫图片,是我学习java来练练手的,java基础入门的学生可以考虑参考一下
  • web前端上传图片到Java后端,并保存到本地 /** * 上传图片 * @param file * @return */ @RequestMapping(value = "/uploadFile") @ResponseBody // 参数:(图片名称,图片(不进行特殊处理))前端统一放到file...
  • java代码生成图片保存到本地

    千次阅读 2019-02-16 14:41:45
    图片实体图片里 try { ImageIO.write(bufferedImage, "jpg", file); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // 2.将图片流里 ...
  • JAVA快速获取网络图片或者URL图片保存到本地,直接上代码: import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io....
  • java图片保存到本地; pom.xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.7</version> </...
  • java 根据url下载图片保存到本地

    千次阅读 2014-07-20 11:03:37
    import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL;...import java.net....* 使用URLConnection下载文件或图片保存到本地。 * * @author 老紫
  • java前端上传图片保存到本地文件夹

    千次阅读 2019-06-04 15:04:29
    后端java代码 import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springf...
  • package me.cj.test1;...import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net....
  • java"] package com.test; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.net.URL; public class Down.....
  • 爬取的是http://www.netbian.com网站的图片,要使用分类中的地址时只需要...保存地址E:\DeskTop\image\background 首先创建Maven工程 引入引入入依赖 <dependency> <groupId>org.jsoup</groupId>...
  • java获取微信小程序二维码保存到本地并返回图片,下次如果检查到本地图片,那么就返回本地的图片,不再发起请求,否则重新发起请求并保存到本地,直接看代码吧。 获取access_token的方法可以参考:...
  • 基于海康sdk的java程序摄像头实时抓拍图片保存到本地的Maven项目,将maven项目导入后修还本项目中HCNetSDK.java中的在库文件路径即可

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592
精华内容 236
关键字:

java保存图片到本地

java 订阅