java常用功能

1.复制文件

    private void fileChannelCopy(File source, File target) throws IOException {
        FileInputStream fi = null;
        FileOutputStream fo = null;
        FileChannel in = null;
        FileChannel out = null;
        
        try {
            fi = new FileInputStream(source);
            fo = new FileOutputStream(target);
            in = fi.getChannel();
            out = fo.getChannel();
            in.transferTo(0, in.size(), out);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                 fi.close();
                 in.close();
                 fo.close();
                 out.close();
            } catch (IOException e) {
                LOGGER.error("File copy failed.", e);
            }      
        }
    }

 2. restApi 显示图片

    @GET
    @Path("/")
    @Produces("image/*")public StreamingOutput getImage(final @QueryParam("path") String path) throws IOException {
    
        LOGGER.debug("source:" + path);
        
        return new StreamingOutput() {
            
            @Override
            public void write(OutputStream output) throws IOException, 
                WebApplicationException {
                try (
                        InputStream in = storage.getDocument(path)) {
                        output.write(IOUtils.readBytesFromStream(in));
                    } catch (final FileNotFoundException ex) {
                        LOGGER.error("file is not founded.", ex);
                        throw new NotFoundException();
                    }
                
            }
        };
    }
public class StorageUtil {
    private final File folder = new File("/macc/img");
    
    public StorageUtil() throws IOException {
        if (!folder.exists() && !folder.mkdirs()) {
            throw new IOException("Unable to initialize FS storage:" + folder.getAbsolutePath());
        }
        
        if (!folder.isDirectory() || !folder.canWrite() || !folder.canRead()) {
            throw new IOException("Unable to access FS storage:" + folder.getAbsolutePath());
        }        
    }
    
    public void addDocument(final String name, final byte[] content) throws IOException {
        try (InputStream in = new ByteArrayInputStream(content)) {
            addDocument(name, in);
        }
    }
    
    public void addDocument(final String name, final InputStream in) throws IOException { 
        final File f = new File(folder, name);
        
        if (f.exists() && !f.delete()) {
            throw new IOException("Unable to delete FS file:" + f.getAbsolutePath());
        } 
        
        try (OutputStream out = new BufferedOutputStream(new FileOutputStream(f))) {
            out.write(IOUtils.readBytesFromStream(in));
            
            f.deleteOnExit();
        }
    }
    
    public InputStream getDocument(final String name) throws IOException {
        String path = folder + "/" + name;
        final File f = new File(path);
        
        if (!f.exists() || !f.isFile()) {
            throw new FileNotFoundException("Unable to access FS file:" + f.getAbsolutePath());
        }
        
        return new FileInputStream(f);
    }
    
    public void deleteAll() throws IOException {
        for (final File f: folder.listFiles()) {
            if (!f.delete()) {
                throw new IOException("Unable to delete FS file:" + f.getAbsolutePath());
            }
        }
    }
}

3.上传图片-表单模式

    @POST
    @Consumes("multipart/form-data")
    @Path("/upload")
    public Response uploadFileByForm(@Context
            HttpServletRequest imgRequest,
            @Multipart(value="name",type="text/plain")String name,
            @Multipart(value="file")Attachment image) {
          
        DataHandler dh = image.getDataHandler();  
  
        try {  
            InputStream ins = dh.getInputStream();  
            writeToFile(ins, "/macc/img/" + dh.getName());  
        } catch (Exception e) {  
            LOGGER.error("upload failed.", e);
        }  
  
        return Response.ok().entity("ok").build();  
    }

4.图片上传-二进制流模式

    @POST
    @Consumes(MediaType.APPLICATION_OCTET_STREAM)
    @ModuleSecurityAuth(moduleId=ModuleId.PLAN ,privilegeOperation=PrivilegeOperation.WRITE)
    @Path("/uploadstream")
    public UploadFileRsp uploadFile(@Context
            HttpServletRequest imgRequest) {
        UploadFileRsp response =new UploadFileRsp();
        try {  
            InputStream ins = imgRequest.getInputStream();
            Integer groupId = Integer.parseInt(imgRequest.getParameter("group_id"));
            String name = imgRequest.getParameter("name");
            BufferedImage bi =ImageIO.read(ins); 
            int height = bi.getHeight();
            int width = bi.getWidth();
            String storeName = getStoreName(groupId);
            String path = tenantId() + "/" + storeName;
            File out = new File(PLAN_PICTURE_PATH + path);
            
            //没有文件夹则创建
            if(!out.getParentFile().exists())
                out.getParentFile().mkdirs();
            
            ImageIO.write(bi, getSuffix(name), out);
            pictureService.bindPicture2Floor(path, name, tenantId(), userId(), groupId, width, height);
            response.setHeight(height);
            response.setPath(path);
            response.setWidth(width);
        } catch (Exception e) {  
            LOGGER.error("upload failed.", e);
            response.buildCode(RestCode.PICTURE_UPLOAD_ERROR);
        }  
  
        return response;
    }

 

posted @ 2016-01-29 11:58  無限大  阅读(546)  评论(0编辑  收藏  举报