linhaisong 2016-06-01 10:31 采纳率: 0%
浏览 3819

如何接受XMLHttpRequest传输过来的文件

图片说明

如何将上图中选中的文件流保存到本地

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-06-01 10:45
    关注
     String contentType = request.getContentType();
    try{
    if(contentType.indexOf("multipart/form-data") >= 0){
    //读入上传的数据
    in = new DataInputStream(request.getInputStream());
    int formDataLength = request.getContentLength();
    if(formDataLength > MAX_SIZE){
    out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");
    return;
    }
    //保存上传文件的数据
    byte dataBytes[] = new byte[formDataLength];
    int byteRead = 0;
    int totalBytesRead = 0;
    //上传的数据保存在byte数组
    while(totalBytesRead < formDataLength){
    byteRead = in.read(dataBytes,totalBytesRead,formDataLength);
    totalBytesRead += byteRead;
    }
    //根据byte数组创建字符串
    String file = new String(dataBytes);
    //out.println(file);
    //取得上传的数据的文件名
    String saveFile = file.substring(file.indexOf("filename=\"") + 10);
    saveFile = saveFile.substring(0,saveFile.indexOf("\n"));
    saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
    int lastIndex = contentType.lastIndexOf("=");
    //取得数据的分隔字符串
    String boundary = contentType.substring(lastIndex + 1,contentType.length());
    //创建保存路径的文件名
    String fileName = rootPath + saveFile;
    //out.print(fileName);
    int pos;
    pos = file.indexOf("filename=\"");
    pos = file.indexOf("\n",pos) + 1;
    pos = file.indexOf("\n",pos) + 1;
    pos = file.indexOf("\n",pos) + 1;
    int boundaryLocation = file.indexOf(boundary,pos) - 4;
    //out.println(boundaryLocation);
    //取得文件数据的开始的位置
    int startPos = ((file.substring(0,pos)).getBytes()).length;
    //out.println(startPos);
    //取得文件数据的结束的位置
    int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;
    //out.println(endPos);
    //检查上载文件是否存在
    File checkFile = new File(fileName);
    if(checkFile.exists()){
    out.println("<p>" + saveFile + "文件已经存在.</p>");
    }
    //检查上载文件的目录是否存在
    File fileDir = new File(rootPath);
    if(!fileDir.exists()){
    fileDir.mkdirs();
    }
    //创建文件的写出类
    fileOut = new FileOutputStream(fileName);
    //保存文件的数据
    fileOut.write(dataBytes,startPos,(endPos - startPos));
    fileOut.close();
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么