2017-03-01 3 views
0

Hallo versuche ich Operationen wie Hochladen einer Datei, Anzeigen einer Datei, Herunterladen einer Datei und Löschen einer Datei mit Feder mvc Ich habe Erfolg beim Hochladen von Datei und Löschen von Datei alle Operationen arbeiten gut, aber dann was passiert ist, wenn ich die hochgeladene Datei kann das Hochladen oder Bild angezeigt wird oder zweimal und immer java.lang.IllegalStateException Download: getOutputStream() bereits für diese AntwortHochladen, Anzeigen, Herunterladen und Löschen von Dateien mit Feder mvc

<form method="post" action="doUpload" enctype="multipart/form-data"> 
     <table border="0"> 
      <tr> 
       <td>Pick file #1:</td> 
       <td><input type="file" name="fileUpload" size="50" /></td> 
      </tr> 
     <tr> 
         <td>Pick file #2:</td> 
         <td><input type="file" name="fileUpload" size="50" /></td> 
        </tr> 
        <tr> 
         <td colspan="2" align="center"><input type="submit" value="Upload" /></td> 
        </tr> 
       </table> 
      </form> 

<table border="1" bgcolor="black" width="600px"> 
<tr style="background-color: teal; color: white; text-align: center;" 
     height="40px"> 
<td>File Name</td> 
<td>Image</td> 
<td>Download</td> 
<td>Delete</td> 
</tr> 
    <c:forEach items="${employeeList}" var="user"> 
     <tr style="background-color: white; color: black; text-align: center;" 
               height="30px"> 
      <td><c:out value="${user.fileName}" /></td> 
      <td><img src="show?id=${user.id}" /></td> 
      <td><a href="edit?id=${user.id}">Download</a></td> 
      <td><a href="delete?id=${user.id}">Delete</a></td> 
     </tr> 
    </c:forEach> 
</table> 
genannt
@Controller 
@RequestMapping("/") 
public class RegistrationController { 
    @Autowired 
    private IRegistrationService registerService; 

    @RequestMapping(value = "/saveParentAndStudentFromAdmin", method = RequestMethod.POST) 
    public ModelAndView saveParentAndStudentByAdmin(
      @ModelAttribute Student student, 
      @RequestParam CommonsMultipartFile[] fileUpload) { 
     if (fileUpload != null && fileUpload.length > 0) { 
      for (CommonsMultipartFile aFile : fileUpload) { 
       System.out.println("Saving file: " 
         + aFile.getOriginalFilename()); 
       student.setFileName(aFile.getOriginalFilename()); 
       student.setFileType(aFile.getContentType()); 
       student.setData(aFile.getBytes()); 
       registerService.saveParentAndStudentByAdmin(student); 
      } 
     } 
     java.util.List<Student> uploadedFiles = registerService.findAllFiles(); 
     return new ModelAndView("StudentEnrollmentFromAdmin", "employeeList", 
       uploadedFiles); 

    } 

    @RequestMapping("delete") 
    public ModelAndView deleteUser(@RequestParam int id) { 
     registerService.deleteRow(id); 
     java.util.List<Student> uploadedFiles = registerService.findAllFiles(); 
     return new ModelAndView("StudentEnrollmentFromAdmin", "employeeList", 
       uploadedFiles); 

    } 

    @RequestMapping("show") 
    public ModelAndView displayImage(@RequestParam int id, 
      HttpServletResponse response, HttpServletRequest request) { 

     System.out.println("Id to display image: " + id); 
     Student item = registerService.get(id); 
     response.setContentType("image/jpeg, image/jpg, image/png, image/gif"); 
     try { 
      response.getOutputStream().write(item.getData()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      response.getOutputStream().close(); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
     return new ModelAndView("StudentEnrollmentFromAdmin"); 
    } 

    @RequestMapping("downalod") 
    public ModelAndView downloadFile(@RequestParam int id, 
      HttpServletResponse response, HttpServletRequest request) { 

     System.out.println("Id to download: " + id); 

     Student student = registerService.get(id); 
     response.setContentType(student.getFileType()); 
     response.setContentLength(student.getData().length); 
     response.setHeader("Content-Disposition", "attachment; filename=\"" 
       + student.getFileName() + "\""); 

     try { 
      FileCopyUtils.copy(student.getData(), response.getOutputStream()); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
     java.util.List<Student> uploadedFiles = registerService.findAllFiles(); 
     return new ModelAndView("StudentEnrollmentFromAdmin", "employeeList", 
       uploadedFiles); 
    } 
} 

Antwort

0

Wenn ich deine Frage richtig verstanden kann man so etwas tun:

public ResponseEntity<InputStreamResource> getFile(@PathVariable("idForm") String idForm) 
{ 
    try 
    { 
     Student item = registerService.get(id); 
     HttpHeaders respHeaders = new HttpHeaders(); 
     //Change it with your real content type 
     MediaType mediaType = new MediaType("img","jpg"); 
     respHeaders.setContentType(mediaType); 
     respHeaders.setContentLength(file.length()); 
     //I suppose you have a method "getFileName" 
       //By using attachment you download the file; by using inline you should see the image in the browser 
     respHeaders.setContentDispositionFormData("attachment", item.getFileName()); 
     InputStreamResource isr = new InputStreamResource(new ByteArrayOutputStream(item.getData())); 
     return new ResponseEntity<InputStreamResource>(isr, respHeaders, HttpStatus.OK); 
    } 
    catch (Exception e) 
    { 
     String message = "Error; "+e.getMessage(); 
     logger.error(message, e); 
     return new ResponseEntity<InputStreamResource>(HttpStatus.INTERNAL_SERVER_ERROR); 
    } 
} 

Angelo

+0

sehen, ich habe meine Frage nach der Aktualisierung noch einige Dinge ausprobiert –

+0

Sie kein neues Modeland zurückkehren können, wenn Sie die Verwendung Antwort Ausgangsstrom; o Sie geben null zurück o Sie verwenden den Code, den ich gepostet habe –

Verwandte Themen