SSM下整合netty使用队列进行文件传输demo
来源:互联网 发布:linux开启端口监听 编辑:程序博客网 时间:2024/05/24 04:59
原创文章
自己在闲暇无事的时候做的一些小demo,在这里分享出来给大家
@Service@Scope("prototype")public class PictureServiceImpl implements PictureService { @Value("${UPLOAD_PATH}") private String UPLOAD_PATH; @Value("${IMAGES_URL}") private String IMAGES_URL; @Value("${NETTY_URL}") private String NETTY_URL; @Value("${NETTY_PORT}") private Integer NETTY_PORT; @Autowired private FileThreadManager fileThreadManager; @Override public PictureResult uploadFile(MultipartFile file) { PictureResult pictureResult = new PictureResult(); if (!file.isEmpty()) { try { String fileName = file.getOriginalFilename(); String newname = UUID.randomUUID() + fileName.substring(fileName.lastIndexOf(".")); new Thread(new Runnable() { @Override public void run() { try { fileThreadManager.start(NETTY_URL, NETTY_PORT); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); fileThreadManager.submit(file.getBytes(), newname, null); System.out.println("尝试获取数据"); while (fileThreadManager.getFileInfoByName(newname) == null) {} FileInfo fileInfo = fileThreadManager.getFileInfoByName(newname); BeanUtils.copyProperties(fileInfo, pictureResult); } catch (Exception e) { e.printStackTrace(); pictureResult.setError(1); pictureResult.setMessage("上传失败"); } } else { pictureResult.setMessage("上传图片为空"); pictureResult.setError(1); } return pictureResult; }}
下面是主要的队列及netty的主要代码
@Component@Scope("prototype")public class FileThreadManager implements BeanFactoryAware{ private BeanFactory beanFactory; private ExecutorService pool = Executors.newCachedThreadPool(); private volatile ChannelFuture cf; private ConcurrentHashMap<String, FileInfo> map=new ConcurrentHashMap<>(); @Autowired private CustomChannelHandler customChannelHandler; public void submit(byte[] file,String fileNewName,String message){ while(cf==null){} System.out.println("提交任务"); FileThread fileThread = beanFactory.getBean(FileThread.class); fileThread.setFile(file); fileThread.setFileNewName(fileNewName); fileThread.setMessage(message); fileThread.setCf(cf); pool.execute(fileThread); } public void start(String nettyUrl,Integer nettyPort) throws InterruptedException{ if(cf!=null) return ; EventLoopGroup workgroup = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(workgroup); b.channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel sc) throws Exception { // TODO Auto-generated method stub sc.pipeline().addLast(MarshallingCodeCFactory.buildMarshallingDecoder()); sc.pipeline().addLast(MarshallingCodeCFactory.buildMarshallingEncoder()); sc.pipeline().addLast(customChannelHandler); customChannelHandler.setMap(map); } }); b.option(ChannelOption.SO_KEEPALIVE, true); ChannelFuture cf = b.connect(nettyUrl, nettyPort).sync(); this.cf=cf; cf.channel().closeFuture().sync(); workgroup.shutdownGracefully(); } public FileInfo getFileInfoByName(String fileName) throws InterruptedException{ Set<Entry<String, FileInfo>> entrySet = map.entrySet(); for (Entry<String, FileInfo> entry : entrySet) { if(entry.getKey().trim().equals(fileName.trim())){ return entry.getValue(); } } return null; } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { // TODO Auto-generated method stub this.beanFactory=beanFactory; }}
最后说一下,FileThread,FileInfo和PictureResult等类都是自己自定义的类型,根据自己的需要从而定义。
0 0
- SSM下整合netty使用队列进行文件传输demo
- 使用Netty进行文件传输
- 使用Netty进行文件传输
- Netty文件传输,使用HttpChunk
- SSM整合+demo
- SSM整合(带demo)
- Java NIO框架Netty教程(十五)-利用Netty进行文件传输
- Maven下SSM项目整合笔记04:使用测试类进行数据库增删改查的测试
- 使用串口进行文件传输
- 使用TFTP进行文件传输
- 使用secureCRT进行文件传输
- 使用 Thrift 进行文件传输
- 在Linux下使用nc命令进行文件传输
- Unix/Linux下使用sz,rz进行文件传输
- ssm+redis整合的一个Demo
- Eclipse下使用Maven整合SSM(spring springmvc mybatis)
- 使用maven,实现ssm(spring+springmvc+mybatis)三大框架的整合DEMO
- bootstrap+angular+ssm整合(下)
- 常见Java集合实现细节——Iterator迭代器
- Java网络编程基本知识
- RMI 、 RPC 和webservice 的区别
- cp: omitting directory”错误的解释和解决办法
- 485. Max Consecutive Ones
- SSM下整合netty使用队列进行文件传输demo
- 深入理解乐观锁与悲观锁
- ab测试
- mongo(八)Bulk Write Operations
- (4.3.2.20)在activity中的子线程中startActivity异常dispatchCancelPendingInputEvents()' on a null object referen
- iOS图片剪裁
- RF测试时的Deembedding是什么作用
- week9- Dynamic Programming-NO.377. Combination Sum IV
- Win10如何在局域网搭建FTP服务器?