2012-01-20 1 views
-1

Я написал код для загрузки файла (blob в таблице базы данных). Я получаю приглашение во время загрузки, но когда я загружаю его размер, увеличивается и открывается как пустой файл или поврежденный файл. Контроллер, вызывающий 2 метода сервиса downloadfile(): -, чтобы получить тип blob в массив байтов.загрузка файла из таблицы базы данных (Mysql, spring)

downloadfilename(): - для получения имени файла, хранящегося в базе данных. Код для

регулятора,
protected ModelAndView handleRequestInternal(HttpServletRequest request, 
       HttpServletResponse response) throws Exception { 
      byte[] fileBytes = userService.downloadFile(); 
      String filename = userService.downloadFileName(); 

      String fileType = filename.substring(filename.indexOf(".")+1,filename.length()); 
      System.out.println("FILETYPE IS :>>>>>>>>>>>>>>>"+fileType); 

      if (fileType.trim().equalsIgnoreCase("txt")) 
      { 
      response.setContentType("text/plain"); 
      } 
      else if (fileType.trim().equalsIgnoreCase("doc")) 
      { 
      response.setContentType("application/msword"); 
      } 
      else if (fileType.trim().equalsIgnoreCase("xls")) 
      { 
      response.setContentType("application/vnd.ms-excel"); 
      } 
      else if (fileType.trim().equalsIgnoreCase("pdf")) 
      { 
      response.setContentType("application/pdf"); 
      } 
      else if (fileType.trim().equalsIgnoreCase("ppt")) 
      { 
      response.setContentType("application/ppt"); 
      } 
      else 
      { 
      response.setContentType("application/octet-stream"); 
      } 

      response.setHeader("Content-Disposition","attachment; filename=\""+filename+"\""); 
      response.setHeader("cache-control", "no-cache"); 
      response.setHeader("cache-control", "must-revalidate"); 

      ServletOutputStream outs = response.getOutputStream(); 
      outs.write(fileBytes); 
      outs.flush(); 
      outs.close(); 
      return null; 

     } 

DAO КЛАСС идет как это ..

public String downloadFile(){ 
String selectquery = "select * from upload_file where id=1"; 
       System.out.println("inside after query"); 
       ResultSet rs = stmt.executeQuery(selectquery); 
       while (rs.next()) { 
        fileBytes = rs.getBytes("description"); 
        fileName = rs.getString("upload_filename"); 
        System.out.println("**************************************" 
          + fileName);  
       } 
       return fileName; 
      } catch (SQLException s) { 
       System.out.println(s); 
      } 
      connection.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

ответ

0

Вы вопрос не совсем понятно, но я думаю, что я знаю, что вы имеете в виду.

Если файл большой (10 МБ), то вы должны указать длину содержимого в заголовке http. Если не браузеры будут вести себя нестандартно. (Точный предел 10 МБ зависит от браузера)

Смежные вопросы