概述
1、对一个文件babse64加密,再上传到指定位置。使用多线程可以提高文件上传速度。 2、java 实现: @Slf4j public class FileUploadDemo { public static void uploadFiles(String localFilePath,String uploadFile){ InputStream is = null; FileOutputStream os = null; //获取上传文件的base64编码文件并进行解码 try { is = new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(localFilePath)); //创建一个文件输出流 os = new FileOutputStream(new File(uploadFile)); //创建一个缓冲区 byte[] buffer = new byte[10 * 1024 * 1024]; //判断输入流中的数据是否已经读完的标识 //循环将输入流读入到缓冲区当中,(len = in.read(buffer)>0表示里面还有数据) int length; while ((length = is.read(buffer))>0){ os.write(buffer,0,length); } os.flush(); } catch (FileNotFoundException e) { log.error("未找到上传的文件"+ e); e.printStackTrace(); // throw new ServerException("未找到文件"); }catch (IOException e){ log.error("文件读取异常" + e); e.printStackTrace(); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { log.error("Exception:" + e); e.printStackTrace(); } } if(os!=null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); log.error("Exception:"+ e); } } } } public static String EncoderFile(String filePath){ InputStream is = null; byte[] data = null; try { //读取文件所有字节,方法1 // is = new FileInputStream(filePath); // data = new byte[is.available()]; // is.read(data); // is.close(); //读取文件所有字节,方法2 data = Files.readAllBytes(Paths.get(filePath)); }catch (FileNotFoundException e) { log.error("未找到上传的文件"+ e); e.printStackTrace(); // throw new ServerException("未找到文件"); } catch (IOException e) { e.printStackTrace(); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { log.error("Exception:" + e); e.printStackTrace(); } } } BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); } //创建线程池 static ThreadPoolExecutor executor = new ThreadPoolExecutor(2 ,50 ,10 , TimeUnit.SECONDS ,new LinkedBlockingQueue<>(100) , Executors.defaultThreadFactory() ,new ThreadPoolExecutor.AbortPolicy() ); public static void main(String[] args) { //计算文件上传时间 StopWatch stopWatch = new StopWatch(); stopWatch.start(); String localPath = "/Users/yangxusheng/Desktop/2.pdf"; String s = EncoderFile(localPath); String s1 = EncoderFile(localPath); String s2 = EncoderFile(localPath); String uploadPath = "/Users/ttt/Desktop/1.pdf"; String uploadPath1 = "/Users/ttt/Desktop/1.pdf"; String uploadPath2 = "/Users/ttt/Desktop/1.pdf"; //一般情况 // uploadFiles(s,uploadPath); // uploadFiles(s1,uploadPath1); // uploadFiles(s2,uploadPath2); //使用多线程的情况 CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(()->{ uploadFiles(s,uploadPath); return 200; },executor); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(()->{ uploadFiles(s1,uploadPath1); return 300; },executor); CompletableFuture<Integer> future3 = CompletableFuture.supplyAsync(()->{ uploadFiles(s2,uploadPath2); return 300; },executor); // stopWatch.stop(); System.out.println(stopWatch.getTotalTimeMillis()); } }
最后
以上就是执着芒果为你收集整理的java 文件上传(使用多线程)的全部内容,希望文章能够帮你解决java 文件上传(使用多线程)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复