This is another post about file handling in ADF. Previous post was about uploading and downloading any type of file from absolute server path
See-
Uploading and downloading files from absolute server path in Oracle ADF (12.1.3)
This post is specifically about handling image files, uploading an image file to server path and immediately show it on page using af:image component
So here i am using Jdev 12C (12.1.3) , see step by step implementation
Check in D://ADF folder, image file is uploaded there with a new name
Again upload another image-
Check that previous file is deleted from folder and current one is there-
See-
Uploading and downloading files from absolute server path in Oracle ADF (12.1.3)
This post is specifically about handling image files, uploading an image file to server path and immediately show it on page using af:image component
So here i am using Jdev 12C (12.1.3) , see step by step implementation
- Create a fusion web application and a page in viewController
- Now drop af:inputFile (to browse and select file), af:image (to show uploaded image) and a button to upload file
- Bind af:inputFile value to managed bean variable, this variable is further used to read or write or process file
- Now see Managed Bean method to upload image file to absolute server path
- set usesUpload to true for af:form component on page to support file upload
- Now upload part is complete , next is to show uploaded image on page. So to do this create a servlet (this will process image file into bytes and then show using af:image component)
- See Servlet code and how it is mapped with af:image component
- Now run this application and check this (All uploaded files will be stored in D://ADF path)
//To Store Value of selected file private UploadedFile imageFile; public void setImageFile(UploadedFile imageFile) { this.imageFile = imageFile; } public UploadedFile getImageFile() { return imageFile; }
Bean Method to Upload File-
//To Store path of uploaded Image file String imagePath = null; public void setImagePath(String imagePath) { this.imagePath = imagePath; } public String getImagePath() { return imagePath; } /**Method to upload image file to absolute server path*/ private String uploadImage(UploadedFile file) { UploadedFile myfile = file; if (myfile == null) { } else { if (myfile.getContentType().equalsIgnoreCase("image/jpeg") || myfile.getContentType().equalsIgnoreCase("image/png") || myfile.getContentType().equalsIgnoreCase("image/bmp") || myfile.getContentType().equalsIgnoreCase("image/gif")) { //Path of folder on drive String path = "D://ADF//"; String type = "PNG"; String TypeVal = ".png"; if (myfile.getContentType().equalsIgnoreCase("image/jpeg")) { type = "JPEG"; TypeVal = ".jpeg"; } else if (myfile.getContentType().equalsIgnoreCase("image/png")) { type = "PNG"; TypeVal = ".png"; } else if (myfile.getContentType().equalsIgnoreCase("image/bmp")) { type = "PNG"; TypeVal = ".png"; } else if (myfile.getContentType().equalsIgnoreCase("image/gif")) { type = "GIF"; TypeVal = ".gif"; } InputStream inputStream = null; try { //Generate a unique name for uploaded image with date time DateFormat dateFormat = new SimpleDateFormat("yyMMdd_HHmmss"); Date date = new Date(); String dtTime = dateFormat.format(date); dtTime = dtTime.replace(" ", "_"); String name = "IMG" + "_" + dtTime; System.out.println("File name is-" + name); inputStream = myfile.getInputStream(); BufferedImage input = ImageIO.read(inputStream); //Writing file to path File outputFile = new File(path + name + TypeVal); ImageIO.write(input, type, outputFile); imagePath = outputFile.getAbsolutePath(); } catch (Exception ex) { // handle exception ex.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { } } } else { imagePath = "NO"; } } setImageFile(null); return imagePath; }
ActionListener of Upload Button-
/**Action Listener to Upload image File * @param actionEvent */ public void uploadImageFileAction(ActionEvent actionEvent) { File directory = new File("D://ADF//"); //get all the files from a directory File[] fList = directory.listFiles(); for (File file : fList) { //Delete all previously uploaded files if (!"NoImage.png".equalsIgnoreCase(file.getName())) { file.delete(); } } //Upload Currently Selected File String flag = uploadImage(imageFile); if ("NO".equalsIgnoreCase(flag)) { FacesMessage msg = new FacesMessage("This is not an Image file, Please upload supported file type (.jpg,.png etc)"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, msg); } }
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ViewImageServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=UTF-8"; public void init(ServletConfig config) throws ServletException { super.init(config); } /** * @param request * @param response * @throws ServletException * @throws IOException */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = (request.getParameter("path")); OutputStream os = response.getOutputStream(); //If path is null or file is not an image if (path.equalsIgnoreCase("No")) { path = "D:\\ADF\\NoImage.png"; } if (request.getParameter("path") == "") { path = "D:\\ADF\\NoImage.png"; } InputStream inputStream = null; try { File outputFile = new File(path); inputStream = new FileInputStream(outputFile); BufferedInputStream in = new BufferedInputStream(inputStream); int b; byte[] buffer = new byte[10240]; while ((b = in.read(buffer, 0, 10240)) != -1) { os.write(buffer, 0, b); } } catch (Exception e) { System.out.println(e); } finally { if (os != null) { os.close(); } if (inputStream != null) { inputStream.close(); } } } }
Select an image and click upload (Image is immediately reflected on page)
Check in D://ADF folder, image file is uploaded there with a new name
Again upload another image-
Check that previous file is deleted from folder and current one is there-
Happy Learning :)
Download-Sample ADF Application
Hi Ashish,
ReplyDeleteIt's great topic, so thank you.
But What is the propose of servelt. As I know we can do the uploading functionality without it?
Servelt is used to show image in af:image component not to upload it
DeleteAshish
Nice 👍
ReplyDelete