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

  • 相关阅读:
    DataAnnotations
    使用BizTalk实现RosettaNet B2B So Easy
    biztalk rosettanet 自定义 pip code
    Debatching(Splitting) XML Message in Orchestration using DefaultPipeline
    Modifying namespace in XML document programmatically
    IIS各个版本中你需要知道的那些事儿
    关于IHttpModule的相关知识总结
    开发设计的一些思想总结
    《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
    《ASP.NET SignalR系列》第四课 SignalR自托管(不用IIS)
  • 原文地址:https://www.cnblogs.com/wwwjie/p/8277062.html
Copyright © 2011-2022 走看看