jsp blob 絕對路徑及war包路徑

1,在pojo中使用byte[] 數組來進行保存blob對象

2,用apache fileupload來進行文件上傳操作

3,java 類獲取絕對路徑的方法

    Class.class.getResource("/").toString(),這樣要用indexof獲取web-inf的位置,並將file:\這幾個前綴刪掉

    Class.class.getResource("/").getPath(),前面沒有file前綴

4,在sql xml中添加typeHandler

<result property="image" column="IMAGE"

            typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />

 

5,bytes to file 的方法

InputStream inputStream = new ByteArrayInputStream(image);

    filePath = Action.class.getResource("/").getPath();

    filePath = filePath + "/upload/" + user + ".jpg";

    FileOutputStream out = new FileOutputStream(filePath);

    byte[] b = new byte[1024*1024];

    int length = 0;

    while((length = inputStream.read(b)) != -1) {

        out.write(b, 0, length);

    }

    out.close();

 

6,文件上傳

 

String realPath = getServletContext().getRealPaht("/Temp");

    DiskFileItemFactory factory = new DisFileItemFactory(1024*1024, new File(readPath));

    ServletFileUpload fileUpload = new ServletFileUpload(factory);

    List<FIleItem> list = fileUpload.parseRequest(request);

    for(FileItem fileItem : list) {

        if(fileItem.isFormField()) {//普通表單項

            String fieldName = fileItem.getFieldName();

            String value = fileItem.getString("UTF-8");

        } else {//上傳文件

            String fieldName = fileItem.getFieldName();

            InputStream in = fileItem.getInputStream();//從頁面獲取的文件

            String path = getServletContext().getRealPath("");

           FileOutputStream out = new FileOutputStream(path+"/uploadTemp/"+newFileName+".jpg");//將頁面上傳的文件存儲到服務器的文件夾上

            byte[] b = new byte[1024*1024];

            int length  = 0;

            while((length = in.read(b)) != -1) {

                out.write(b, 0, length);

            }

            //將服務器上的這個文件轉換成byte數組

            FileImageInputStream inFile = new FileImageInputStream(new File(path+"/uploadTemp/"+newFileName+".jpg"));

            ByteArrayOutputStream byteArr = new ByteArrayOutputStream();

            while((length = inFile.read(b)) != -1) {

                byteArr(b, 0, length);

            }

            byte[] photo = byteArr.toByteArray();

            //存儲數據庫,略

            fileItem.delete();

            in.close();

            out.close();

終極方案:當使用spring定時器時,request和ServletContext無法獲取,可以用下面的辦法直接獲取ServletContext:

ContextLoader.getCurrentWebApplicationContext().getServletContext();

在George項目中的使用總結:

讀寫文件的時候可能需要獲得路徑,比如上傳文件的時候就需要輸出流。而通過ServletContext不可以直接獲得輸出流的,但可以直接獲取文件的實際路徑。如:

servletContext.getRealPath("/");

這樣獲得的路徑是${context}/的路徑,可以依據子路徑和文件名稱拼接獲取輸出流

        

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章