English 中文(简体)
How to Upload a file from client to server using OFBIZ?
原标题:
  • 时间:2010-12-22 04:49:13
  •  标签:
  • java
  • ofbiz

I created a project inside the ofbiz/hot-deploy folder namely productionmgntSystem. Inside the folder ofbizhot-deployproductionmgntSystemwebappproductionmgntSystem I created a .ftl file namely app_details_1.ftl.The following is the code of this file

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Insert title here</title>
        <script TYPE="TEXT/JAVASCRIPT" language=""JAVASCRIPT">
            function uploadFile()
            {
                //alert("Before calling upload.jsp");
                window.location= <@ofbizUrl>testing_service1</@ofbizUrl> 

            }

        </script>
    </head>
        <!-- <form action="<@ofbizUrl>testing_service1</@ofbizUrl>" enctype="multipart/form-data" name="app_details_frm"> -->
        <form action="<@ofbizUrl>logout1</@ofbizUrl>" enctype="multipart/form-data" name="app_details_frm"> 
        <center style="height: 299px; ">
            <table border="0" style="height: 177px; width: 788px">
                <tr style="height: 115px; ">
                    <td style="width: 103px; ">
                    <td style="width: 413px; "><h1>APPLICATION DETAILS</h1>
                    <td style="width: 55px; ">
                </tr>
                <tr>
                    <td style="width: 125px; ">Application name : </td>
                    <td>
                        <input name="app_name_txt" id="txt_1" value=" " />
                    </td>
                </tr>
                <tr>
                    <td style="width: 125px; ">Excell sheet &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </td>
                    <td>
                        <input type="file" name="filename"/>
                    </td>
                </tr>
                <tr>
                    <td>
                       <!-- <input type="button" name="logout1_cmd" value="Logout" onclick="logout1()"/> -->
                       <input type="submit" name="logout_cmd" value="logout"/>
                    </td>
                    <td>
                        <!-- <input type="submit" name="upload_cmd" value="Submit" /> -->
                        <input type="button" name="upload1_cmd" value="Upload" onclick="uploadFile()"/>
                    </td>                   
                </tr>
            </table>
        </center>
    </form>
</html>

the following coding is present in the file "ofbizhot-deployproductionmgntSystemwebappproductionmgntSystemWEB-INFcontroller.xml"

......
.......
........
<request-map uri="testing_service1">
            <security https="true" auth="true"/>            
            <event type="java" path="org.ofbiz.productionmgntSystem.web_app_req.WebServices1" invoke="testingService"/>
            <response name="ok" type="view" value="ok_view"/>
            <response name="exception" type="view" value="exception_view"/>         
        </request-map>
..........
............
..........
<view-map name="ok_view" type="ftl" page="ok_view.ftl"/>        
<view-map name="exception_view" type="ftl" page="exception_view.ftl"/> 
................
.............
.............

The following is the code in the file ofbizhot-deployproductionmgntSystemsrcorgofbizproductionmgntSystemweb_app_reqWebServices1.java

package org.ofbiz.productionmgntSystem.web_app_req;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class WebServices1
{
    public static String testingService(HttpServletRequest request, HttpServletResponse response)
    {
        //int i=0;
        String result="ok";
        System.out.println("

	*************************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response)- Start");
        String contentType=request.getContentType();
        System.out.println("

	*************************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response)- contentType : "+contentType);
        String str=new String();
        // response.setContentType("text/html");
        //PrintWriter writer;
        if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0))
        {
            System.out.println("

	**********************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response) after if (contentType != null)");
            try
            {
                // writer=response.getWriter();
                System.out.println("

	**********************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response) - try Start");
                DataInputStream in = new DataInputStream(request.getInputStream());
                int formDataLength = request.getContentLength();
                byte dataBytes[] = new byte[formDataLength];
                int byteRead = 0;
                int totalBytesRead = 0;

                //this loop converting the uploaded file into byte code
                while (totalBytesRead < formDataLength)
                {
                    byteRead = in.read(dataBytes, totalBytesRead,formDataLength);
                    totalBytesRead += byteRead;
                }

                String file = new String(dataBytes);
                //for saving the file name
                String saveFile = file.substring(file.indexOf("filename="") + 10);
                saveFile = saveFile.substring(0, saveFile.indexOf("
"));
                saveFile = saveFile.substring(saveFile.lastIndexOf("\")+ 1,saveFile.indexOf("""));
                int lastIndex = contentType.lastIndexOf("=");
                String boundary = contentType.substring(lastIndex + 1,contentType.length());
                int pos;

                //extracting the index of file
                pos = file.indexOf("filename="");
                pos = file.indexOf("
", pos) + 1;
                pos = file.indexOf("
", pos) + 1;
                pos = file.indexOf("
", 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;

                //creating a new file with the same name and writing the content in new file
                FileOutputStream fileOut = new FileOutputStream("/"+saveFile);
                fileOut.write(dataBytes, startPos, (endPos - startPos));
                fileOut.flush();
                fileOut.close();
                System.out.println("

	**********************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response) - try End");
            }
            catch(IOException ioe)
            {
                System.out.println("

	*********************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response) - Catch IOException");
                //ioe.printStackTrace();
                return("exception");
            }
            catch(Exception ex)
            {
                System.out.println("

	*********************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response) - Catch Exception");
                return("exception");
            }
        }
        else
        {
            System.out.println("

	********************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response) else part");
            result="exception";
        }
        System.out.println("

	*************************************
	Inside WebServices1.testingService(HttpServletRequest request, HttpServletResponse response)- End");
        return(result);
    }
}

I want to upload a file to the server.The file is get from user <input type="file"..> tag in the app_details_1.ftl file & it is updated into the server by using the method testingService(HttpServletRequest request, HttpServletResponse response) in the class WebServices1. But the file is not uploaded.

最佳回答

I got the solution to my problem.I successfully upload the file into the server.This solution i get after the big fight with ofbiz.I made a little changes in my old coding.That is given below.

the following are the coding present in the "app_details_1.ftl"

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

        <!--<meta http-equiv="Content-Type" content="multipart/form-data; charset=ISO-8859-1">-->

        <title>Insert title here</title>
        <script TYPE="TEXT/JAVASCRIPT" language=""JAVASCRIPT">
            function uploadFile()
            {
                //alert("Before calling upload.jsp");
                window.location= <@ofbizUrl>testing_service1</@ofbizUrl> 

            }

            function logout1()
            {
                //alert("Logout1");
                alert("<@ofbizUrl>logout1</@ofbizUrl>");
                window.location= <@ofbizUrl>logout1</@ofbizUrl> 
            }
        </script>
        </head>
        <!-- <form action="<@ofbizUrl>testing_service1</@ofbizUrl>" enctype="multipart/form-data" name="app_details_frm"> -->
        <body bgcolor="cyan">
            <form enctype="multipart/form-data" action="<@ofbizUrl>uploadAttachFile</@ofbizUrl>" METHOD=POST>
                <center style="height: 299px;">
                    <table border="0" style="height: 177px; width: 788px">
                        <tr style="height: 115px; ">
                            <td style="width: 103px; ">
                            <td style="width: 440px; "><h1>APPLICATION DETAILS</h1>
                            <td style="width: 55px; ">
                        </tr>
                        <tr>
                            <td style="width: 125px; ">Application name : </br></td>
                            <td>
                                <input name="app_name_txt" id="txt_1" value=" " />
                            </td>
                            <td></br></br></td>
                        </tr>
                        <tr>
                            <td style="width: 125px; ">Excell sheet &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: </td>
                            <td>
                                <input type="file" name="filename"/>
                            </td>
                            <td></br></br></td>
                        </tr>
                        <tr>
                            <td>
                            <td></br>
                            <td>
                        </tr>
                        <tr>
                            <td>
                               <input type="button" name="logout1_cmd" value="LOGOUT" onclick="logout1()"/>
                              <!-- <input type="submit" name="logout_cmd" value="logout"/>-->
                            </td>
                            <td>
                                <input type="submit" name="upload_cmd" value="UPLOAD" />
                                <!-- <input type="button" name="upload1_cmd" value="Upload" onclick="uploadFile()"/> -->
                            </td>
                        </tr>
                    </table>
                </center>
            </form>
        </body>
</html>

Here my main changes in the form action attribute.

The following are the coding snippet in "controller.xml"

...............
.............
<request-map uri="uploadAttachFile">
            <security https="true" auth="true"/>
           <!--  <event type="simple" invoke="createCommunicationContent" path="component://productionmgntSystem/script/org/ofbiz/productionmgntSystem/CommunicationEventEvents.xml"/>  -->

           <event type="java" path="org.ofbiz.productionmgntSystem.web_app_req.Uploading" invoke="uploadFile"/>

            <response name="AttachementSuccess" type="view" value="AttachementSuccess"/>
            <response name="AttachementException" type="view" value="AttachementException"/>
        </request-map>    
................
.....................
<view-map name="AttachmentError" type="ftl" page="file_attach_error.ftl"/>
<view-map name="AttachementException" type="ftl" page="file_attach_error.ftl"/>
<view-map name="AttachementSuccess" type="ftl" page="AttachementSuccess.ftl"/>
...........
............

Here i should map a request "uploadAttachFile" to the event "uploadFile".That is this event call the method "uploadFile" inside the class "org.ofbiz.productionmgntSystem.web_app_req.Uploading".This class is defined by me.Actually file uplaod is there in ofbiz i just copy the coding & altered some changes for my application.

Inside the method "uploadFile" is i write the coding for uploading the file into server. I stored the class "org.ofbiz.productionmgntSystem.web_app_req.Uploading" in the following folder "ofbizhot-deployproductionmgntSystemsrcorgofbizproductionmgntSystemweb_app_req". Here the "productionmgntSystem" is the my application name.

The following are coding present inside the class "org.ofbiz.productionmgntSystem.web_app_req.Uploading"

//UPLOADING A CONTENT TO THE SERVER

package org.ofbiz.productionmgntSystem.web_app_req;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.io.FileOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.ofbiz.service.ServiceUtil;
import java.util.List;

public class Uploading
{
    public static String uploadFile(HttpServletRequest request,HttpServletResponse response)
    {
        //ServletFileUpload fu = new ServletFileUpload(new DiskFileItemFactory(10240, new File(new File("runtime"), "tmp")));           //Creation of servletfileupload
        System.out.println("

	****************************************
	uploadFile(HttpServletRequest request,HttpServletResponse response) - start
	");
        ServletFileUpload fu = new ServletFileUpload(new DiskFileItemFactory());           //Creation of servletfileupload
        java.util.List lst = null;
        String result="AttachementException";
        String file_name="";
        try 
        {
            lst = fu.parseRequest(request);
        }
        catch (FileUploadException fup_ex) 
        {
            System.out.println("

	****************************************
	Exception of FileUploadException 
	");
            fup_ex.printStackTrace();
            result="AttachementException";
            return(result);
        }

        if(lst.size()==0)        //There is no item in lst
        {
            System.out.println("

	****************************************
	Lst count is 0 
	");
            result="AttachementException";
            return(result);
        }


        FileItem file_item = null;
        FileItem selected_file_item=null;

        //Checking for form fields - Start
            for (int i=0; i < lst.size(); i++) 
            {
                file_item=(FileItem)lst.get(i);
                String fieldName = file_item.getFieldName();

                //Check for the attributes for user selected file - Start
                    if(fieldName.equals("filename"))
                    {
                        selected_file_item=file_item;
                        //String file_name=file_item.getString();                       
                        //file_name=request.getParameter("filename");
                        file_name=file_item.getName();             //Getting the file name
                        System.out.println("

	****************************************
	The selected file item s file name is : "+file_name+"
	");
                        break;
                    }
                //Check for the attributes for user selected file - End
            }
        //Checking for form fields - End

        //Uploading the file content - Start
            if(selected_file_item==null)                    //If selected file item is null
            {
                System.out.println("

	****************************************
	The selected file item is null
	");
                result="AttachementException";
                return(result);
            }

            byte[] file_bytes=selected_file_item.get();
            byte[] extract_bytes=new byte[file_bytes.length];

            for(int l=0;l<file_bytes.length;l++)
                extract_bytes[l]=file_bytes[l];
            //ByteBuffer byteWrap=ByteBuffer.wrap(file_bytes);
            //byte[] extract_bytes;
            //byteWrap.get(extract_bytes);


            //System.out.println("

	****************************************
	Extract succeeded :content are : 
	");


            if(extract_bytes==null)
            {
                System.out.println("

	****************************************
	Extract bytes is null
	");
                result="AttachementException";
                return(result);
            }

            /*
            for(int k=0;k<extract_bytes.length;k++)
                System.out.print((char)extract_bytes[k]);
            */

            //String target_file_name="/hot-deploy/productionmgntSystem"
            //Creation & writing to the file in server - Start              
                try
                {
                    FileOutputStream fout=new FileOutputStream(file_name);
                    System.out.println("

	****************************************
	After creating outputstream");
                    fout.flush();
                    fout.write(extract_bytes);
                    fout.flush();
                    fout.close();
                }
                catch(IOException ioe_ex)
                {
                    System.out.println("

	****************************************
	IOException occured on file writing");
                    ioe_ex.printStackTrace();
                    result="AttachementException";
                    return(result);
                }
            //Creation & writing to the file in server - End

            System.out.println("

	****************************************
	uploadFile(HttpServletRequest request,HttpServletResponse response) - end
	");
            return("AttachementSuccess");
        //Uploading the file content - End
    }
}

Now in my application im able to upload the file into the server.

问题回答

If you don t want to write in ftl and want to write it in a simple form, here is my code. but First let me thank SIVAKUMAR.J for putting me on the right track.

Here is the form s code:

<form name="ImportBulkAttendance" target="uploadFileJava" type="upload" default-map-name="content" focus-field-name="contentTypeId" header-row-style="header-row" default-table-style="basic-table">

    <field name="filename" title="filename">
        <file name="filename"/>
    </field>
    <field name="createButton">
        <submit button-type="button" />
    </field>
</form>

Then in controller.xml

   <request-map uri="uploadFileJava">
    <security https="true" auth="true"/>
    <event type="java" path="com.ofbiz.attendance.Uploading" invoke="uploadFile"/>
   </request-map>
<view-map name="AttachmentError" type="screen" page="component://yourComponentName/widget/yourComponentNameScreens.xml#main"/>

create ant missing folder in this path in your project: yourComponentFolder/src/ofbiz/attendance/ then create Uploading.java

package com.ofbiz.attendance;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.io.FileOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.ofbiz.service.ServiceUtil;
import java.util.List;

public class Uploading
{
    public static String uploadFile(HttpServletRequest request,HttpServletResponse response)
    {
        //ServletFileUpload fu = new ServletFileUpload(new DiskFileItemFactory(10240, new File(new File("runtime"), "tmp")));           //Creation of servletfileupload
        System.out.println("

	****************************************
	uploadFile(HttpServletRequest request,HttpServletResponse response) - start
	");
        ServletFileUpload fu = new ServletFileUpload(new DiskFileItemFactory());           //Creation of servletfileupload
        java.util.List lst = null;
        String result="AttachementException";
        String file_name="";
        try 
        {
            lst = fu.parseRequest(request);
        }
        catch (FileUploadException fup_ex) 
        {
            System.out.println("

	****************************************
	Exception of FileUploadException 
	");
            fup_ex.printStackTrace();
            result="AttachementException";
            return(result);
        }
    if(lst.size()==0)        //There is no item in lst
    {
        System.out.println("

	****************************************
	Lst count is 0 
	");
        result="AttachementException";
        return(result);
    }


    FileItem file_item = null;
    FileItem selected_file_item=null;

    //Checking for form fields - Start
        for (int i=0; i < lst.size(); i++) 
        {
            file_item=(FileItem)lst.get(i);
            String fieldName = file_item.getFieldName();

            //Check for the attributes for user selected file - Start
                if(fieldName.equals("filename"))
                {
                    selected_file_item=file_item;
                    //String file_name=file_item.getString();                       
                    //file_name=request.getParameter("filename");
                    file_name=file_item.getName();             //Getting the file name
                    System.out.println("

	****************************************
	The selected file item s file name is : "+file_name+"
	");
                    break;
                }
            //Check for the attributes for user selected file - End
        }
    //Checking for form fields - End

    //Uploading the file content - Start
        if(selected_file_item==null)                    //If selected file item is null
        {
            System.out.println("

	****************************************
	The selected file item is null
	");
            result="AttachementException";
            return(result);
        }

        byte[] file_bytes=selected_file_item.get();
        byte[] extract_bytes=new byte[file_bytes.length];

        for(int l=0;l<file_bytes.length;l++)
            extract_bytes[l]=file_bytes[l];
        //ByteBuffer byteWrap=ByteBuffer.wrap(file_bytes);
        //byte[] extract_bytes;
        //byteWrap.get(extract_bytes);


        //System.out.println("

	****************************************
	Extract succeeded :content are : 
	");


        if(extract_bytes==null)
        {
            System.out.println("

	****************************************
	Extract bytes is null
	");
            result="AttachementException";
            return(result);
        }

        /*
        for(int k=0;k<extract_bytes.length;k++)
            System.out.print((char)extract_bytes[k]);
        */

        //String target_file_name="/hot-deploy/productionmgntSystem"
        //Creation & writing to the file in server - Start              
            try
            {
                FileOutputStream fout=new FileOutputStream(file_name);
                System.out.println("

	****************************************
	After creating outputstream");
                fout.flush();
                fout.write(extract_bytes);
                fout.flush();
                fout.close();
            }
            catch(IOException ioe_ex)
            {
                System.out.println("

	****************************************
	IOException occured on file writing");
                ioe_ex.printStackTrace();
                result="AttachementException";
                return(result);
            }
        //Creation & writing to the file in server - End

        System.out.println("

	****************************************
	uploadFile(HttpServletRequest request,HttpServletResponse response) - end
	");
        return("AttachementSuccess");
    //Uploading the file content - End
}


}

That s it copy the files with the same name and they should work directly :) I hope this saves someone s time. N.B. You don t need to create an XML service.





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签