Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Issue uploading a file

    I am trying to upload a file and I used the example here:
    http://www.smartclient.com/smartgwte...se/#upload_sql
    but I have issues.

    My upload form is the following:
    Code:
    final DynamicForm editDokumenteForm =  new DynamicForm();
    editDokumenteForm.setDataSource( DataSource.get( "dokumente" ) );
    FileItem fileItem = new FileItem("f_datei", "Document"); 
    editDokumenteForm.setFields( fileItem );
    
    IButton editDokumenteOkButton = new IButton( "save" );
    editDokumenteOkButton.addClickHandler(new ClickHandler() {
       public void onClick(ClickEvent event) {
          dokumenteEditForm.saveData();
       }
    }
    My Datasource:
    Code:
    <DataSource
        ID="dokumente"
    	serverType="sql"
    	tableName="t_dokumente"
    >
        <fields>
        	<field name="f_id" type="sequence" primaryKey="true" />
    	<field name="f_datei" type="imageFile" />
    
        </fields>
    </DataSource>
    I am using MSSQL. On my table definition I have:
    f_id, primary key, with autoincrement.
    f_datei, varbinary(max) null,
    f_datei_date_created date null,
    f_datei_filename varchar null,
    f_datei_filesize int null.

    When I click on the "save" Button, I get this exception:
    Code:
    === 2012-07-02 10:13:52,634 [l0-3] DEBUG SQLTransaction - [builtinApplication.dokumente_add] Started new SQLSERVER transaction "14913826"
    === 2012-07-02 10:13:52,634 [l0-3] INFO  SQLDriver - [builtinApplication.dokumente_add] Executing SQL update on 'SQLSERVER': INSERT INTO t_dokumente (f_datei) VALUES (?)
    === 2012-07-02 10:13:52,650 [l0-3] WARN  SQLDriver - [builtinApplication.dokumente_add] Exception thrown during saveGeneratedKeys()
    com.microsoft.sqlserver.jdbc.SQLServerException: Die Anweisung muss ausgeführt werden, bevor Ergebnisse abgerufen werden können.
    	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
    	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getGeneratedKeys(SQLServerStatement.java:2002)
    	at org.apache.commons.dbcp.DelegatingStatement.getGeneratedKeys(DelegatingStatement.java:318)
    	at com.isomorphic.sql.SQLServerDriver.saveGeneratedKeys(SQLServerDriver.java:266)
    	at com.isomorphic.sql.SQLDriver.doUpdate(SQLDriver.java:539)
    	at com.isomorphic.sql.SQLDriver.update(SQLDriver.java:482)
    	at com.isomorphic.sql.SQLDriver.executeUpdate(SQLDriver.java:604)
    	at com.isomorphic.sql.SQLDataSource.executeNativeUpdate(SQLDataSource.java:403)
    	at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:1388)
    	at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:293)
    	at com.isomorphic.sql.SQLDataSource.executeAdd(SQLDataSource.java:245)
    	at com.isomorphic.datasource.DataSource.execute(DataSource.java:1291)
    	at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:721)
    	at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
    	at com.isomorphic.application.AppBase.execute(AppBase.java:491)
    	at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:1948)
    	at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:199)
    	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:156)
    	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:121)
    	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:73)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)
    	at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:67)
    	at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122)
    	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.Server.handle(Server.java:324)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    === 2012-07-02 10:13:52,650 [l0-3] WARN  RequestContext - dsRequest.execute() failed: 
    com.microsoft.sqlserver.jdbc.SQLServerException: Wert für Parameternummer "1" wurde nicht festgelegt.
    	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildParamTypeDefinitions(SQLServerPreparedStatement.java:262)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(SQLServerPreparedStatement.java:221)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(SQLServerPreparedStatement.java:598)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:386)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
    	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
    	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
    	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
    	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
    	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:308)
    	at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
    	at com.isomorphic.sql.SQLDriver.doUpdate(SQLDriver.java:530)
    	at com.isomorphic.sql.SQLDriver.update(SQLDriver.java:482)
    	at com.isomorphic.sql.SQLDriver.executeUpdate(SQLDriver.java:604)
    	at com.isomorphic.sql.SQLDataSource.executeNativeUpdate(SQLDataSource.java:403)
    	at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:1388)
    	at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:293)
    	at com.isomorphic.sql.SQLDataSource.executeAdd(SQLDataSource.java:245)
    	at com.isomorphic.datasource.DataSource.execute(DataSource.java:1291)
    	at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:721)
    	at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
    	at com.isomorphic.application.AppBase.execute(AppBase.java:491)
    	at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:1948)
    	at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:199)
    	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:156)
    	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:121)
    	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:73)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)
    	at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:259)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:67)
    	at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122)
    	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
    	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
    	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
    	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
    	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    	at org.mortbay.jetty.Server.handle(Server.java:324)
    	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
    	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
    	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
    === 2012-07-02 10:13:52,651 [l0-3] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2012-07-02 10:13:52,651 [l0-3] DEBUG SQLTransaction - Rolling back SQLSERVER transaction "14913826"
    === 2012-07-02 10:13:52,653 [l0-3] DEBUG RPCManager - non-DMI response, dropExtraFields: false
    === 2012-07-02 10:13:52,653 [l0-3] DEBUG SQLTransaction - Ending SQLSERVER transaction "14913826"
    === 2012-07-02 10:13:52,653 [l0-3] INFO  Compression - /zedes2/sc/IDACall: 176 -> 158 bytes
    So it seems the file is not being sent.
    This is the firebug output:

    Code:
    Parameter:
    
    isc_rpc	1
    isc_v	v8.2p_2012-04-12
    isc_xhr	1
    
    Request Header:
    
    POST /zedes2/sc/IDACall?isc_rpc=1&isc_v=v8.2p_2012-04-12&isc_xhr=1 HTTP/1.1
    Host: 127.0.0.1:8888
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://127.0.0.1:8888/zedes2.html?gwt.codesvr=127.0.0.1:9997
    Content-Length: 964
    Cookie: JSESSIONID=1jah9ur5skg1j; isc_cState=ready
    Pragma: no-cache
    Cache-Control: no-cache
    
    Reply header:
    
    HTTP/1.1 200 OK
    Expires: Mon, 02 Jul 2012 08:13:52 GMT
    Content-Length: 158
    X-Included-Test2: true
    X-Included-Test: true
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Type: text/plain; charset=utf-8
    Content-Encoding: gzip
    Server: Jetty(6.1.x)
    
    Post:
    
    <transaction xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:type="xsd:Object"><transactionNum xsi:type="xsd:long">14</transactionNum><operations xsi:type="xsd:List"><elem xsi:type="xsd:Object"><values xsi:type="xsd:Object"><f_datei>mozodojo-original-image.jpg</f_datei><f_schueler_id xsi:type="xsd:long">2</f_schueler_id></values><operationConfig xsi:type="xsd:Object"><dataSource>dokumente</dataSource><operationType>add</operationType></operationConfig><componentId>isc_DynamicForm_2</componentId><appID>builtinApplication</appID><operation>dokumente_add</operation><oldValues xsi:type="xsd:Object"></oldValues></elem></operations></transaction>
    
    Reply:
    //isc_RPCResponseStart-->[{data:"Wert für Parameternummer \"1\" wurde nicht festgelegt.",invalidateCache:false,isDSResponse:true,queueStatus:-1,status:-1}]//isc_RPCResponseEnd
    My RPC Request/Reply on the developer console:

    Code:
    RPC Request:
    
    {
        "actionURL":"http://127.0.0.1:8888/zedes2/sc/IDACall", 
        "showPrompt":true, 
        "prompt":"Saving form...", 
        "transport":"xmlHttpRequest", 
        "promptStyle":"cursor", 
        "bypassCache":true, 
        "data":{
            "values":{
                "f_datei":"mozodojo-original-image.jpg", 
                "f_schueler_id":2
            }, 
            "operationConfig":{
                "dataSource":"dokumente", 
                "repo":null, 
                "operationType":"add"
            }, 
            "componentId":"isc_DynamicForm_2", 
            "appID":"builtinApplication", 
            "operation":"dokumente_add", 
            "oldValues":{
            }, 
            "streamResults":null, 
            "exportToFilesystem":null, 
            "exportToClient":null
        }
    }
    
    RPC Response:
    [
        {
            data:"Wert für Parameternummer \"1\" wurde nicht festgelegt.", 
            invalidateCache:false, 
            isDSResponse:true, 
            queueStatus:-1, 
            status:-1
        }
    ]
    
    DSRequest:
    {
        "dataSource":"dokumente", 
        "operationType":"add", 
        "componentId":"isc_DynamicForm_2", 
        "data":{
            "f_datei":"mozodojo-original-image.jpg", 
            "f_schueler_id":2
        }, 
        "callback":{
            "target":[DynamicForm ID:isc_DynamicForm_2], 
            "methodName":"saveEditorReply"
        }, 
        "showPrompt":true, 
        "prompt":"Saving form...", 
        "oldValues":{
        }, 
        "clientContext":{
        }, 
        "requestId":"dokumente$62716"
    }
    So only the filename is being sent, not the filesize, lastmodified, and the binary data if I read this correctly.

    So what's going wrong?

    I use SmartGWT EE 3.0p and Firefox 13.0.1.
    Thank you!
    Last edited by edulid; 2 Jul 2012, 02:40.

    #2
    You are correct that the file is not being sent to the server - the Content-Type should be "multipart/form-data" when a file is being uploaded.

    However the code you've shown won't reproduce the problem - you could create a problem like this if you had setCanSubmit(false), had tried to setEncoding(), etc. Try isolating the problem.

    Comment

    Working...
    X