網絡資源url轉化為file對象下載文件


注:只測試過網絡圖片資源。

 

一、使用org.apache.commons.io.FileUtils

二、

三、httpURLConnection.disconnect();

四、

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;

/**
 * URLConnection的連接、超時、關閉用法總結 : https://www.cnblogs.com/achengmu/p/10057243.html
 * RandomAccessFile簡介與使用 : https://blog.csdn.net/qq_31615049/article/details/88562892
 */
public class Test {

    private static String dirPath = "F:\\\\upload2222";
    public static void main(String[] args) throws IOException {

        String url = "http://imgsrc.baidu.com/forum/pic/item/a701a18b87d6277fff058e4125381f30e924fcb0.jpg";
        //方式1
//        copyByUrl(url, rewriteFileName(url), dirPath);
        //方式2
//        urlOpenStreamWrite(url, "antStorm_100171553219414047v.jpg", dirPath);
        //方式3
//        downLoadByUrl(url, "antStorm_100171553219414047m3v.jpg", dirPath);
        //方式4
        randomAccessWrite(url);
    }

    /**
     * import org.apache.commons.io.FileUtils;
     */
    public static void copyByUrl(String urlStr,String fileName,String savePath)throws IOException { URL url = new URL(urlStr); FileUtils.copyURLToFile(url, new File(savePath+ File.separator+fileName)); } /**
     * urlOpenStreamWrite file
     */
    public static void urlOpenStreamWrite(String urlStr,String fileName,String savePath) throws IOException {
        URL url =new URL(urlStr);
        InputStream is = url.openStream();
//        int available = is.available();
//        System.out.println(available);

        File file = new File(savePath + File.separatorChar + fileName);
        //不存在,創建必要的(多層)目錄
        File parentDir = file.getParentFile();
        if(!parentDir.exists())
            parentDir.mkdirs();

        FileOutputStream fos = new FileOutputStream(file);

        byte[] buffer = new byte[2048];
        int len;
        while ((len = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }

        if(fos!=null) fos.close();
        if(is!=null) is.close();
    }

    /**
     * (HttpURLConnection)url.openConnection()
     * httpURLConnection.getInputStream()
     */
    public static void downLoadByUrl(String urlStr,String fileName,String savePath)throws IOException{ URL url =new URL(urlStr); /** * 此處的urlConnection對象實際上是根據URL的 * 請求協議(此處是http)生成的URLConnection類 * 的子類HttpURLConnection,故此處最好將其轉化 * 為HttpURLConnection類型的對象,以便用到 * HttpURLConnection更多的API. */ HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //設置超時間為3秒 // conn.setConnectTimeout(5*1000); //防止屏蔽程序抓取而返回403錯誤 // conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //得到輸入流
        InputStream is = conn.getInputStream(); //偷看有效長度 // int available = is.available(); //文件保存位置
        File saveDir =new File(savePath); if(!saveDir.exists()) saveDir.mkdirs(); File file =new File(saveDir + File.separator + fileName); FileOutputStream fos =new FileOutputStream(file); //獲取緩存內容的byte數組,可以轉化成其他流
        byte[] cachedBytes =readInputStream(is); fos.write(cachedBytes); if(fos!=null) fos.close(); if(is!=null) is.close(); System.out.println("info:"+url+" download success");
     //斷開
     conn.disconnect(); 
//刪除文件 // file.delete(); } /** * 獲取緩存內容的byte數組,可以轉化成其他流 */ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer =new byte[1024]; int len =0; ByteArrayOutputStream bos =new ByteArrayOutputStream(); while((len = inputStream.read(buffer)) != -1) { bos.write(buffer,0, len); } bos.close(); return bos.toByteArray(); }
/** * rewriteFileName重命名,UUIU */ public static String rewriteFileName(String oleFileName) { oleFileName = getOriginalFileName(oleFileName); if (StringUtils.isEmpty(oleFileName)) { return oleFileName; } //得到后綴 if (oleFileName.indexOf(".") == -1) { //對於沒有后綴的文件,直接返回重命名 return UUID.randomUUID().toString(); } String[] arr = oleFileName.split("\\."); // 根據uuid重命名圖片 String fileName = UUID.randomUUID().toString() + "." + arr[arr.length - 1]; return fileName; } /** * 把帶路徑的文件地址解析為真實文件名 /25h/upload/hc/1448089199416_06cc07bf-7606-4a81-9844-87d847f8740f.mp4 解析為 1448089199416_06cc07bf-7606-4a81-9844-87d847f8740f.mp4 * @param url */ public static String getOriginalFileName(final String url) { if (StringUtils.isEmpty(url)) { return url; } String newUrl = url; newUrl = newUrl.split("[?]")[0]; String[] bb = newUrl.split("/"); String fileName = bb[bb.length - 1]; return fileName; } /** * RandomAccessFile 讀寫文件 * https://blog.csdn.net/qq_31615049/article/details/88562892 */ private static void writeFile(InputStream is, File storeFile){ RandomAccessFile raf = null; int buffer_len = 1024; byte[] buffer = new byte[buffer_len]; int readLen = 0; try{ raf = new RandomAccessFile(storeFile, "rw"); raf.seek(raf.length());//設置光標位置。從此處開始寫(插)入文件內容。 while(-1 != (readLen = is.read(buffer, 0, buffer_len))){ raf.write(buffer, 0, readLen); } } catch (Exception e){ e.printStackTrace(); } finally { try { if(raf != null) raf.close(); if(is != null) is.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * * @param funnyUrl * @throws IOException */ public static void randomAccessWrite(String funnyUrl) throws IOException { // String newFIleName = rewriteFileName(funnyUrl).replace("-", ""); //創建tempfile取用后綴就夠了 String newFIleName = getOriginalFileName(funnyUrl); String suffix = newFIleName.substring(newFIleName.lastIndexOf(".")); //指定路徑,否則存儲在默認路徑中 File tempFile = File.createTempFile("url_dwn", suffix, new File(dirPath)); //File tempFile = File.createTempFile("url_dwn", suffix); URL url = new URL(funnyUrl); InputStream is = url.openStream(); writeFile(is, tempFile); } }

 

java通過url得到文件對象(支持http和https):

https://blog.csdn.net/qq_21235239/article/details/99415421

 

五、trash

 

    /**
     * 后台驗證:以后綴名稱檢查圖片格式
     * @param files
     * @return 不容許的文件名稱,以“ , ”隔開
     */
    public static String checkFileType(MultipartFile[] files) {

        StringBuilder rejectFileNames = new StringBuilder();

        for (MultipartFile file : files) {
            String originalFilename = file.getOriginalFilename();
            String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
            //枚舉中可以上傳的文件類型
            List<String> fileTypes = FileType.getFileTypes();
            //可以上傳的文件類型檢查
            if(!fileTypes.contains(suffix)) {
                rejectFileNames.append(originalFilename).append(" , ");
            }
        }

        if(rejectFileNames.length() > 0) {
            int idx = rejectFileNames.lastIndexOf(",");
            //刪除末尾的自定義分隔符
            rejectFileNames.delete(idx - 1, rejectFileNames.length());
        }

        return rejectFileNames.toString();
    }

    /**
     * 圖片格式后綴名稱枚舉
     */
    enum FileType {
        PEG("peg"),
        JPG("jpg"),
        BMP("bmp"),
        PNG("png");

        private String type;

        FileType(String type) {
            this.type = type;
        }

        public String getType() {
            return type;
        }

        public static List<String> getFileTypes() {
            FileType[] fileTypes = FileType.values();
            List<String> types = Arrays.stream(fileTypes).map(FileType::getType).collect(Collectors.toList());
            return types;
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM