zoukankan      html  css  js  c++  java
  • Unity3D与JAVA服务器传递文件之服务器端

    • 刚好工作中有用到,特此来记录一下,JAVA服务器用的是JFinal框架。
      • Unity上传文件只能传输字节流,然后服务器这边再将字节流写入文件
      • public void uploadFile() throws IOException {
                renderNull();        
                //==================开始处理文件===================
        
                //接收上传文件内容中临时文件的文件名
                System.out.println(getRequest().getContentLength());
                if(getRequest().getContentLength()>0){
                String tempFileName = new String("tempFileName.txt");
                //tempfile 对象指向临时文件        
                File tempFile = new File(PathKit.getWebRootPath() + File.separator+tempFileName);
                System.out.println("FilePath:"+PathKit.getWebRootPath() + File.separator+tempFileName);
                //outputfile 文件输出流指向这个临时文件
                FileOutputStream outputStream = new FileOutputStream(tempFile);
                //得到客户端提交的所有数据       
                InputStream fileSourcel = getRequest().getInputStream();
                
                //将得到的客户端数据写入临时文件
                byte b[] = new byte[1000];
                int n ;
                while ((n=fileSourcel.read(b))!=-1){            
                    System.out.println("b:"+b);
                    System.out.println("n:"+n);
                    outputStream.write(b,0,n);
                }
        
                //关闭输出流和输入流
                outputStream.close();
                fileSourcel.close();
        
                //randomFile对象指向临时文件
                RandomAccessFile randomFile = new RandomAccessFile(tempFile,"r");
                //读取临时文件的前三行数据
                randomFile.readLine();
                randomFile.readLine();
                randomFile.readLine();
                //读取临时文件的第四行数据,这行数据中包含了文件的路径和文件名
                String filePath = randomFile.readLine();
                //得到文件名
                System.out.println(filePath);
                int position = filePath.lastIndexOf("filename");
                String filename =Tool.codeString(filePath.substring(position+10,filePath.length()-1));
                System.out.println("filename"+filename);
                //重新定位读取文件指针到文件头
                randomFile.seek(0);
                //得到第五行回车符的位置,这是上传文件数据的开始位置
                long  fifthEnterPosition = 0;
                int fifth = 1;
                while((n=randomFile.readByte())!=-1&& fifth<=5)){
                    System.out.println("n:"+n);
                    System.out.println( fifth:" fifth);
                    if(n=='
        '){
                     fifthEnterPosition = randomFile.getFilePointer();
                     fifth++;
                    }
                    System.out.println( fifthEnterPosition:" fifthEnterPosition);
                }
        
                //生成上传文件的目录
                File fileupLoad = new File(PathKit.getWebRootPath() + File.separator,"upLoad");
                fileupLoad.mkdir();
                //saveFile 对象指向要保存的文件
                File saveFile = new File(PathKit.getWebRootPath() +"\upLoad",filename);
                RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,"rw");
                //找到上传文件数据的结束位置,即倒数第三行
                randomFile.seek(randomFile.length());
                long endPosition = randomFile.getFilePointer();
                System.out.println("endPosition:"+endPosition);
                int j = 1;
                while((endPosition>=0)&&(j<=3)){
                    System.out.println("endPosition1:"+endPosition);
                    System.out.println("j:"+j);
                    endPosition--;
                    randomFile.seek(endPosition);
                    if(randomFile.readByte()=='
        '){
                        j++;
                    }
                }
        
                //从上传文件数据的开始位置到结束位置,把数据写入到要保存的文件中
                System.out.println( fifthEnterPosition:" fifthEnterPosition);
                randomFile.seek fifthEnterPosition);
                long startPoint = randomFile.getFilePointer();
                System.out.println("startPoint:"+startPoint);
                //endPosition=randomFile.getFilePointer();
                System.out.println("endPosition:"+endPosition);
                while(startPoint<endPosition){
                     System.out.println("startPoint1:"+startPoint);
                    //System.out.println("randomFile.readByte():"+randomFile.readByte());
                    randomAccessFile.write(randomFile.readByte());
                    
                    startPoint = randomFile.getFilePointer();
                }
                //关闭文件输入、输出
                randomAccessFile.close();
                randomFile.close();
                tempFile.delete();
                //==================处理文件结束===================
        
                //向控制台输出文件上传成功
                System.out.println("File upload success!");
                checkCsv();
                }else{
                    renderText("false");
                }
                
            } 
      • public class Tool {
        
            /** 文件字节流 */
            public static byte[] getBytes(String filePath) {
                byte[] buffer = null;
                try {
                    File file = new File(filePath);
                    FileInputStream fis = new FileInputStream(file);
                    ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
                    byte[] b = new byte[1000];
                    int n;
                    while ((n = fis.read(b)) != -1) {
                        bos.write(b, 0, n);
                    }
                    fis.close();
                    bos.close();
                    buffer = bos.toByteArray();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return buffer;
            }
        
            /** 处理中文字符串的函数 */
            public static String codeString(String str) {
                String s = str;
                try {
                    byte[] temp = s.getBytes("UTF-8");
                    s = new String(temp);
                    return s;
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return s;
                }
            }
        }
      • 用网页上传与字节流传输完全不一样
      • public void uploadFileWeb() throws IOException {
                UploadFile uploadFile = this.getFile();
                String fileName = uploadFile.getOriginalFileName();
                File file = uploadFile.getFile();
                FileService fs = new FileService();
                File t = new File("D:\file\" + fileName); 
                try {
                    t.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                fs.fileChannelCopy(file, t);
                file.delete();
            }
      • 下载文件用的是JFinal的renderFile
      • // 下载文件
            public void downfile() throws FileNotFoundException, IOException {
                readfiles("D:\file\");
                String name = getPara("filename");
                System.out.println(name);
                int index = -1;
                for (int i = 0; i < filearraylist.size(); i++) {
                    if (filearraylist.get(i).indexOf(name) != -1) {
                        index = i;
                    }
                }
                System.out.println(index);
                if (index > -1) {
                    renderFile(new File(filearraylist.get(index)));
                    System.out.println(filearraylist.get(index));
                }
            }
        
            // 递归获取目录下的所有文件
            public static boolean readfiles(String filepath) throws FileNotFoundException, IOException {
                try {
                    File file = new File(filepath);
                    if (!file.isDirectory()) {
                        System.out.println("文件");
                        System.out.println("path=" + file.getPath());
                        System.out.println("absolutepath=" + file.getAbsolutePath());
                        System.out.println("name=" + file.getName());
                        filearraylist.add(file.getPath());
                        // filearraylist.add("<a href='/file/downfile'>下载</a><br>");
                    } else if (file.isDirectory()) {
                        System.out.println("文件夹");
                        String[] filelist = file.list();
                        for (int i = 0; i < filelist.length; i++) {
                            File readfile = new File(filepath + "\" + filelist[i]);
                            if (!readfile.isDirectory()) {
                                System.out.println("path=" + readfile.getPath());
                                System.out.println("absolutepath=" + readfile.getAbsolutePath());
                                System.out.println("name=" + readfile.getName());
                                filearraylist.add(readfile.getPath());
                            } else if (readfile.isDirectory()) {
                                readfiles(filepath + "\" + filelist[i]);
                            }
                        }
                    }
                } catch (FileNotFoundException e) {
                    System.out.println("readfile()   Exception:" + e.getMessage());
                }
                return true;
            }

        引用自http://blog.csdn.net/aries_h/article/details/50971981

  • 相关阅读:
    Git windows换行问题
    java之aop使用及自定义注解
    Shiro授权及注解式开发
    Git Gui、Ssh key的使用和ideaui配置使用Git解决冲突(下)
    Git和Github的介绍、简单操作、冲突(上)
    Shiro身份认证、盐加密
    Shiro简介、入门案例、web容器的集成
    SpringMVC入门
    Mybatis之关联关系(一对多、多对多)
    Mybatis整合(Redis、Ehcache)实现二级缓存
  • 原文地址:https://www.cnblogs.com/wwwjie/p/8277062.html
Copyright © 2011-2022 走看看