簡體   English   中英

java.io.IOException:寫入服務器時出錯

[英]java.io.IOException: Error writing to server

在我的項目中,我正在嘗試將文件發送到 Amazon S3。 代碼現在可以運行,但有時會發生錯誤,我在 S3 上看不到文件。 下面的日志:

java.io.IOException: Error writing to server
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:625)
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:637)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1321)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at com.datagravity.gdphonehome.sample.SendingBigDataLocal.sendRequest(SendingBigDataLocal.java:219)
at com.datagravity.gdphonehome.sample.SendingBigDataLocal.doGet(SendingBigDataLocal.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

我不明白為什么會這樣。 請看下面,如果可以的話,請幫助我。 我的代碼如下:

public void sendRequest(String request) throws JSONException {

    msg = new StringBuffer();
    String message = null;

    // Add text message parameter
    appendBoudary("text-message", "Text Message");
    message = msg.toString();

    DataFileReader fileUpload;
    mapUploadFiles = new Hashtable<String, Vector<String>>();
    fileUpload = new DataFileReader("/home/varick/DataGravity_Proxy_Application/DGPhoneHome(vuong.tran).war");                                       
    try {
         //Add file to upload
        org.codehaus.jettison.json.JSONObject jsonHeader = new JSONObject();
        jsonHeader = writeJSONHeader();
        Vector file_name = new Vector();
        file_name.add(fileUpload.getBytes());
        file_name.add(appendBoudaryFileHeader(jsonHeader, "phonehome32M-Varick(Test)"));
        mapUploadFiles.put(jsonHeader.toString(), file_name);

    } catch (Exception ex1) {
        ex1.printStackTrace();
    }

    try {
        URL url = new URL(request);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        //connection.setRequestProperty("sessionId", "<sessionId_of_sfdc_username>"); // put sessionId into header
        connection.setRequestProperty("sessionId", json.getString("SessionId")); // sessionId of username: chau.dinh@enclave.vn
        connection.setRequestProperty("SessionIdSFDC", json.getString("SessionIdSFDC"));            

        if (mapUploadFiles.size() > 0) {
            connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + Constants.BOUNDARY_VALUE);
            connection.setRequestProperty("Connection", "Close");
        }
        connection.setRequestMethod("POST");
        out = connection.getOutputStream();
        // Send message first
        if (message != null) {

            // Send text parameters
            out.write(message.toString().getBytes());
            // Send files
            if (null != mapUploadFiles) {
                Enumeration<String> e = mapUploadFiles.keys();
                while (e.hasMoreElements()) {
                    String keyFile = (String) e.nextElement();
                    if (!keyFile.equals(FLAG_MUTI_SUPPORT)) {
                        Vector ItemFiles = (Vector) mapUploadFiles.get(keyFile);
                        //System.out.println("Vector Size: " + ItemFiles.size());
                        String fileHeader = (String) ItemFiles.elementAt(1);
                        System.out.println(fileHeader);
                        // Write header file
                        out.write(fileHeader.getBytes());
                        out.write("\r\n".getBytes());
                        // Write data file uploading
                        byte[] data = (byte[]) ItemFiles.elementAt(0);
                        out.write(data);
                    }
                    out.write("\r\n".getBytes());
                }
            }

            // Send the end signal
            String endBoundary = "\r\n--" + Constants.BOUNDARY_VALUE + "--\r\n";
            out.write(endBoundary.getBytes());
            int respCode = connection.getResponseCode();                
            if (respCode == HttpURLConnection.HTTP_OK) {
                // reads server's response
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String response = reader.readLine();
                System.out.println(response);
            } else {
                System.out.println("Server returned non-OK code: " + respCode);
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

並且行int respCode = connection.getResponseCode();處的錯誤

我懷疑這是某種超時。 我有一個很長的工作,可能只有在大約 20 分鍾的攪動后才開始發送任何東西。 我在作業開始時打開 OutputStream 並按住它,我認為它是不活動超時。

我想知道我可以使用什么保持活動的技術,或者我必須推遲打開輸出流,直到我真正有一個緩沖區要寫入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM