Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Сохранение картинки в Оракл


Автор: mastanik 23.6.2006, 12:49
Опишите, пожплуйста, как вообще реализовать такую фичу?
нужно сделать так, чтобы пользователь на ЖСП страничке выбирал со своего диска картинку, а потом эта картинка сохранилась в БД.

Спасибо ин адванс 

Автор: d_k 23.6.2006, 13:06
Есть тип данных BLOB - вам в эту степь smile 

Автор: mastanik 23.6.2006, 13:10
это уже смешно становится...8)
у кого ни спрашиваю, все говорят одно и тоже8) 

Автор: batigoal 23.6.2006, 13:13
Цитата(mastanik @  23.6.2006,  14:10 Найти цитируемый пост)
это уже смешно становится...8)
у кого ни спрашиваю, все говорят одно и тоже8)  

О чем это говорит? О том, что ответ правильный smile

Или у тебя вызывает вопросы непосредственно аплоад файла с клиента?  

Автор: d_k 23.6.2006, 14:46
mastanik, поиском пользуйся. Столько раз перетиралось, что подробно описывать наскучит любому ;) 

Автор: mastanik 23.6.2006, 15:29
если б ты знал, скока я времени на это убил...8) 

Автор: d_k 23.6.2006, 16:30
Так вопрос то не поставлен!
Что не получается?
Прочитать стрима с твоей картинкой? Библиотек пруд пруди,  для работы с НТМL формами.

Записать LOB?
Ну что то  типа
Код

    public static void initBlob(BigDecimal uid, String table, String dataColumn) throws SQLException, NamingException {
        Connection con = DBDataSourceCache.getDataSource().getConnection();
        con.setAutoCommit(false);
        Statement stmt = con.createStatement();
        stmt.executeUpdate("UPDATE " + table + " SET " + dataColumn + " = empty_blob() WHERE id = " + uid);
        stmt.close();
        con.close();
    }
    
    public static void saveBlob(BigDecimal uid, long pos, byte[] data, int length, String table, String dataColumn)
        throws SQLException, IOException, NamingException {
        Connection con = DBDataSourceCache.getDataSource().getConnection();
        con.setAutoCommit(false);
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT " + dataColumn + " FROM " + table + " WHERE id = " + uid + " FOR UPDATE");
        
        if (rs.next()) {
            BLOB blob = (BLOB) rs.getObject(dataColumn);
            OutputStream out = blob.getBinaryOutputStream(pos + 1);
            out.write(data, 0, length);
            out.close();
        }


 

Автор: mastanik 23.6.2006, 19:04
м-да, теперь проблемы с аплоадом...
обычные файлы нормально сохраняются, а вот как переделать, чтоб изображения сохранялись - не пойму
Код

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class UploadServlet extends HttpServlet
{
    public void service(ServletRequest request,
        ServletResponse response)
        throws IOException
    {
        String contentType = request.getContentType();
        int boundaryIndex = contentType.indexOf("boundary=");

        String boundary = contentType.substring(boundaryIndex+9);
        int boundaryStrLength = boundary.length();

        ServletInputStream servIn = request.getInputStream();

        DataInputStream in = new DataInputStream(servIn);

        String line;

        while ((line = in.readLine()) != null)
        {
              if (line.trim().length() == 0) break;
        }

        ByteArrayOutputStream byteOut = new ByteArrayOutputStream(
            request.getContentLength());

        byte[] buffer = new byte[4096];
        int len;

        while ((len = in.read(buffer)) > 0)
        {
            byteOut.write(buffer, 0, len);
        }

        byte[] outBytes = byteOut.toByteArray();

        FileOutputStream fileOut = new FileOutputStream("/tmp/uploaded_file");

        fileOut.write(outBytes, 0, outBytes.length - boundaryStrLength - 8);
        fileOut.close();

    }
}

 

Автор: d_k 26.6.2006, 10:04
Глянь http://www.sources.ru/java/faq/loadfiles.htm. Авось поможет...
Только проще для этого воьспользоваться какой нибудь стандартной библиотекой, типа http://jakarta.apache.org/commons/fileupload/ 

Автор: mastanik 26.6.2006, 10:36
спасибо за сцылку, попозжее буду разбираться.
а там есть возможность остальные параметры принимать, если в форме не только файл, но и просто несколько полей ввода? 

Автор: d_k 26.6.2006, 13:34
В описаке все написано.
В 1-й ссылке нет. Хотя дописать в соответствии с  RFC 1867 недолго. 

Автор: mastanik 27.6.2006, 15:18
похоже я неудачник...8(
не получается...

Код

package servlets;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.FileUploadException;
/*import org.apache.commons.fileupload.FileItem;*/
import org.apache.commons.fileupload.*;
import java.util.*;

public class addtemp extends HttpServlet
{
    PrintWriter out;
    
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        out = response.getWriter();
        out.println("HELLO GET");
    }
    protected void doPost(HttpServletRequest request,
        HttpServletResponse response)
        throws IOException
    {
     out = response.getWriter();
     
     out.println("HELLO POST");

//      Create a factory for disk-based file items
     FileItemFactory factory = new DiskFileItemFactory();

//      Create a new file upload handler
     ServletFileUpload upload = new ServletFileUpload(factory);

//      Parse the request
     List items; 
     /*try{
         items = upload.parseRequest(request);
     }catch(FileUploadException e){e.printStackTrace();}*/
     
     out.println("<br>PARSE REQUESTs");
     try{
         items = upload.parseRequest(request);
         out.println("<br>ITEMS");
     
//      Process the uploaded items
     Iterator iter = items.iterator();
     while (iter.hasNext()) {
         FileItem item = (FileItem) iter.next();
         out.println("<br>FILE ITEM");
         if (item.isFormField()) {
             processFormField(item);
         } else {
             processUploadedFile(item);
         }
     }
     }catch(FileUploadException e){e.getMessage();}

    }
    public void processFormField(FileItem item){
     if (item.isFormField()) {
         String name = item.getFieldName();
         String value = item.getString();
         out.println("NAME = " + name);
         out.println("<br>VALUE = " + value);
      }
    }
    public void processUploadedFile(FileItem item){
//      Process a file upload
     boolean writeToFile = true;
     if (writeToFile) {
         File uploadedFile = new File("C:/img/temImage");
         try{
         item.write(uploadedFile);
         }catch(Exception ex){ ex.getMessage(); }
     }
    }
}

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)