1 回答

TA貢獻1810條經驗 獲得超4個贊
request.getParameter() 方法將返回字符串,但要獲取實際圖像,您需要獲取文件部分輸入流。然后通過使用該部分,您可以在服務器上創建圖像,并進一步將其作為二進制文件存儲在數據庫中。最有效的方法是將所有文件存儲在外部存儲(如 S3 存儲桶)中,并將路徑存儲在數據庫中。你可以試試下面的代碼。
package com.imageUpload.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imageUpload.utill.DbConnection;
@WebServlet("/ImageUpload")
@MultipartConfig
public class ImageUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name=request.getParameter("name");
InputStream uploadedInputStream = null;
Part filePart = null;
String image = "";
filePart = request.getPart("image"); // Retrieves <input type="file" name="image">
if (filePart != null) {
image = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); //image->name
uploadedInputStream = filePart.getInputStream();
}
FileInputStream fis=new FileInputStream(new File(image));
Connection con=DbConnection.getConnection();
try {
PreparedStatement ps=con.prepareStatement
("insert into image(name,image)values(?,?)");
ps.setString(1,name);
ps.setBinaryStream(3, fis);
int n = ps.executeUpdate();
if(n>0) {
response.getWriter().println("Successfully Uploaded!");
}
}catch(Exception e) {System.out.println("Image E: "+e);}
}
}
添加回答
舉報