2014-09-03 96 views
0

我想在JSP中添加圖像和文件。我應該怎麼做?在這裏,我所做的形式:在java中添加圖像

<div id="user_img"> 
       <form name="form1" method="post" enctype="multipart/form-data" action="image_user_upload_db.jsp"> 
       <input type="file" name="poster" id="imagefile"/> 
       <input type="submit" id="submit_img" value="submit"/> 
       </form> 
      </div> 

和JSP頁面,其在保存圖像幫助:

try{ 
    String ImageFile=""; 
    String itemName = ""; 
    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    if (!isMultipart){ 
    } 
    else{ 
     FileItemFactory factory = new DiskFileItemFactory(); 
     ServletFileUpload upload = new ServletFileUpload(factory); 
     List items = null; 
     try{ 
      items = upload.parseRequest(request); 
     } 
     catch (FileUploadException e){ 
      e.getMessage(); 
     } 

    Iterator itr = items.iterator(); 
    while (itr.hasNext()){ 
     FileItem item = (FileItem) itr.next(); 
     if (item.isFormField()){ 
      String name = item.getFieldName(); 
      String value = item.getString(); 
      if(name.equals("poster")){ 
       ImageFile=value; 
      } 
     } 
     else{ 
      try{ 
       itemName = item.getName(); 
       File savedFile = new  File(config.getServletContext().getRealPath("/")+"\\img\\user_img\\"+itemName); 
       item.write(savedFile); 
      } 
      catch (Exception e){ 
       out.println("Error"+e.getMessage()); 
      } 
     } 
    } 
    try{ 
     String str="update user_info set img_name='"+itemName+"' where user_id=?"; 
     PreparedStatement ps=con.prepareStatement(str); 
     ps.setInt(1,id1); 
     int rs1=ps.executeUpdate(); 
     response.sendRedirect("profile.jsp"); 
    } 
    catch(Exception el){ 
     out.println("Inserting error"+el.getMessage()); 
    } 
} 
} 

我想這種形式採取其他輸入型還可以,但我添加另一種輸入類型的形式,它會給出錯誤。

+2

什麼是錯誤? Stacktrace請求 – VinayVeluri 2014-09-03 07:18:43

+0

沒有錯誤,它只是不讀取它,只要我在表單中使用enctype =「multipart/from-data」,它只讀取圖像/文件,沒有別的。 – 2014-09-03 07:21:12

回答

0

你可以得到他們的價值觀在這個代碼細看

if (item.isFormField()){ 
      String name = item.getFieldName(); 
      String value = item.getString(); 
      if(name.equals("poster")){ 
       ImageFile=value; 
      } 
} 

得到其他字段值只是使用item.getFieldName()然後檢查它是否是你正在尋找,然後將其存儲在一個字段名可變

String otherField; 

if(name.equals("otherField")){ 

    otherField = item.getString(); 
} 
+0

在這裏,它只在表單的方法是post的時候才工作,而且它沒有收到任何與圖像相關的東西。 – 2014-09-03 15:34:17

0

使用下面的代碼在你的操作頁面,

<% 

String saveFile=""; 
String contentType = request.getContentType(); 
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) { 
DataInputStream in = new DataInputStream(request.getInputStream()); 
int formDataLength = request.getContentLength(); 
byte dataBytes[] = new byte[formDataLength]; 
int byteRead = 0; 
int totalBytesRead = 0; 
while (totalBytesRead < formDataLength) { 
byteRead = in.read(dataBytes, totalBytesRead,formDataLength); 
totalBytesRead += byteRead; 
} 
String file = new String(dataBytes); 
saveFile = file.substring(file.indexOf("filename=\"") + 10); 
saveFile = saveFile.substring(0, saveFile.indexOf("\n")); 
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); 
int lastIndex = contentType.lastIndexOf("="); 
String boundary = contentType.substring(lastIndex + 1,contentType.length()); 
int pos; 
pos = file.indexOf("filename=\""); 
pos = file.indexOf("\n", pos) + 1; 
pos = file.indexOf("\n", pos) + 1; 
pos = file.indexOf("\n", pos) + 1; 
int boundaryLocation = file.indexOf(boundary, pos) - 4; 
int startPos = ((file.substring(0, pos)).getBytes()).length; 
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; 
saveFile=config.getServletContext().getRealPath("/")+"user_upload\\"+saveFile; 
File ff = new File(saveFile); 
FileOutputStream fileOut = new FileOutputStream(ff); 
fileOut.write(dataBytes, startPos, (endPos - startPos)); 
fileOut.flush(); 
fileOut.close(); 

} 

%> 

這裏'user_upload'是一個文件夾名稱,其中上​​傳的文件將被存儲。

在執行此代碼之前,您必須在項目目錄中創建一個名爲'user_upload'的文件夾。

注意: - 您可以更改文件夾名稱。

0
use following code 




DiskFileItemFactory factory = new DiskFileItemFactory(); 
      factory.setSizeThreshold(MEMORY_THRESHOLD); 
      factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); 

      ServletFileUpload upload = new ServletFileUpload(factory); 
      upload.setFileSizeMax(MAX_FILE_SIZE); 
      upload.setSizeMax(MAX_REQUEST_SIZE); // sets maximum size of request (include file + form data) 
      String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; 

      File uploadDir = new File(uploadPath); 
      if (!uploadDir.exists()) { 
       uploadDir.mkdir(); 
      } 

      List<FileItem> formItems = upload.parseRequest(request); 

      if (formItems != null && formItems.size() > 0) { 
       for (FileItem item : formItems) { 
        if (!item.isFormField()) { 
         String fileName = new File(item.getName()).getName(); 
         System.out.println("item.getFieldName() => "+item.getFieldName()); 
         String fileAttr[] = fileName.split("\\."); 
         String newFileName = fileAttr[0]; 
         int i = 1; 
         while (true) { 
          File f = new File(uploadPath + "\\" + newFileName + "." + fileAttr[1]); 
          if (f.exists()) { 
           newFileName = fileAttr[0] + i; 
           i++; 
          } else { 
           fileName = newFileName + "." + fileAttr[1]; 
           break; 
          } 
         } 
         String filePath = uploadPath + File.separator + fileName; 
         File storeFile = new File(filePath); 
         item.write(storeFile); 
         request.setAttribute("message","Upload has been done successfully!"); 
        } else { 
         System.out.println("1 item.getFieldName() => "+item.getFieldName()); 
         if("description1".equalsIgnoreCase(item.getFieldName())){ 
          //this part is for other field except file field 
         } 
        } 
       } 
      }