勉強中の者です。画像取得方法を調べています。
やりたいこと
jspで画像を登録しdbに保存したい
状況
・画像を登録しDBに保存しようとすると、例外が発生し、エラーメッセージは「画像取得失敗」のみ表示される。
・PCはエクリプス、psqlのフルディスアクセス設定済み。
間違えをご指摘いただけるとありがたいです。よろしくお願いします。
補足
・変数がnullとなるため、
jsp のenctype="multipart/form-data"を削除してみたところ
以下のスタックトレースのエラー内容となりました。
・画像ファイルをプロジェクトのWebContent直下に置いても、同じ結果となりました。
環境
mac m1
Eclipse JavaEE
javaSE-17
tomcat
psql
addGoods.jsp
1-------- 2<form action="/food/AddGoodsServlet" method="post" enctype="multipart/form-data"> 3 <input type="file" name="goods_img" > 4 5 <input type="submit"value="登録"> 6 </form> 7--------
AddGoodsServlet
1protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 3 int goods_id=0; 4 String goods_img=request.getParameter("goods_img"); 5 6 GoodsDao dao = new GoodsDao(); 7 dao.insert(goods_img); 8 9 RequestDispatcher dispatcher=request.getRequestDispatcher("WEB-INF/jsp/addGoods.jsp"); 10 dispatcher.forward(request, response); 11 }
GoodsDao
1public void insert(String goods_img) throws FileNotFoundException{ 2 3 Connection conn=null; 4 PreparedStatement st=null; 5 try { 6 Class.forName("org.postgresql.Driver"); 7 }catch(Exception e) { 8 e.printStackTrace(); 9 } 10 try { 11 conn=DriverManager.getConnection(JDBC_URL,DB_USER,DB_PASS); 12 13 File file =new File(goods_img); 14 FileInputStream fis = new FileInputStream(file); 15 16 String sql="INSERT INTO goods (goods_img)values(?)"; 17 st=conn.prepareStatement(sql); 18 st.setBinaryStream(1,fis,file.length()); 19 int result=st.executeUpdate(); 20 if(fis!=null) { 21 fis.close(); 22 } 23 }catch(Exception e) { 24 System.out.println("画像取得失敗"); 25 }finally { 26---------- 27
psql
1create table goods( 2goods_id serial not null primary key, 3 goods_img bytea 4);
stacktrace
1java.io.FileNotFoundException: elephant-chobe-botswana.jpg (No such file or directory) 2画像取り込みエラー 3 at java.base/java.io.FileInputStream.open0(Native Method) 4 at java.base/java.io.FileInputStream.open(FileInputStream.java:216) 5 at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) 6 at dao.GoodsDao.insert(GoodsDao.java:40) 7 at servlet.AddGoodsServlet.doPost(AddGoodsServlet.java:50) 8 at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) 9 at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) 10 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) 11 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) 12 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 13 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) 14 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) 15 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) 16 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) 17 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) 18 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) 19 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 20 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) 21 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) 22 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) 23 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) 24 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 25 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) 26 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) 27 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 28 at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) 29 at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) 30 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 31 at java.base/java.lang.Thread.run(Thread.java:833)
回答1件
あなたの回答
tips
プレビュー