java.io.IOException:写入服务器时出错

java.io.IOException:写入服务器时出错,java,url,servlets,Java,Url,Servlets,在我的项目中,我试图将文件发送到AmazonS3。代码现在可以运行了,但有时会出现错误,我在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.writeRe

在我的项目中,我试图将文件发送到AmazonS3。代码现在可以运行了,但有时会出现错误,我在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();
    }
}
public void sendRequest(字符串请求)抛出JSONException{
msg=新的StringBuffer();
字符串消息=null;
//添加文本消息参数
附录(“短信”、“短信”);
message=msg.toString();
DataFileReader文件上传;
mapUploadFiles=新哈希表();
fileUpload=newdatafilereader(“/home/varick/DataGravity_Proxy_Application/DGPhoneHome(vuong.tran.war”);
试一试{
//添加要上载的文件
org.codehaus.jettison.json.JSONObject jsonHeader=new JSONObject();
jsonHeader=writeJSONHeader();
向量文件_name=新向量();
文件名.add(fileUpload.getBytes());
文件名.add(appendBoudaryFileHeader(jsonHeader,“phonehome32M-Varick(Test)”);
mapUploadFiles.put(jsonHeader.toString(),文件名);
}捕获(异常ex1){
ex1.printStackTrace();
}
试一试{
URL=新URL(请求);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(真);
//connection.setRequestProperty(“sessionId”,“”);//将sessionId放入头中
connection.setRequestProperty(“sessionId”,json.getString(“sessionId”);//用户名的sessionId:chau。dinh@enclave.vn
setRequestProperty(“SessionIdSFDC”,json.getString(“SessionIdSFDC”);
如果(mapUploadFiles.size()>0){
connection.setRequestProperty(“内容类型”、“多部分/表单数据;边界=“+常量.边界值”);
connection.setRequestProperty(“连接”、“关闭”);
}
connection.setRequestMethod(“POST”);
out=connection.getOutputStream();
//先发消息
如果(消息!=null){
//发送文本参数
out.write(message.toString().getBytes());
//发送文件
if(null!=mapUploadFiles){
枚举e=mapUploadFiles.keys();
而(e.hasMoreElements()){
字符串keyFile=(字符串)e.nextElement();
如果(!keyFile.equals(标志多支持)){
Vector ItemFiles=(Vector)mapUploadFiles.get(keyFile);
//System.out.println(“向量大小:+ItemFiles.Size());
String fileHeader=(String)ItemFiles.elementAt(1);
System.out.println(文件头);
//写入头文件
write(fileHeader.getBytes());
out.write(“\r\n”.getBytes());
//写入数据文件上传
字节[]数据=(字节[])ItemFiles.elementAt(0);
输出。写入(数据);
}
out.write(“\r\n”.getBytes());
}
}
//发送结束信号
字符串endBoundary=“\r\n--”+Constants.BOUNDARY\u VALUE+“--\r\n”;
write(endBoundary.getBytes());
int respCode=connection.getResponseCode();
if(respCode==HttpURLConnection.HTTP_OK){
//读取服务器的响应
BufferedReader=new BufferedReader(new InputStreamReader(connection.getInputStream());
字符串响应=reader.readLine();
System.out.println(响应);
}否则{
System.out.println(“服务器返回的非OK代码:“+respCode”);
}
}
}捕获(例外情况除外){
例如printStackTrace();
}
}

以及第
int respCode=connection.getResponseCode()行的错误

对于
sun.net.www.protocol.http.HttpURLConnection
来说,编写自己的错误消息而不是使用原始
IOException附带的错误消息非常糟糕,
,但是您可能已经超过了服务器上的上载限制。我使用了大小为61mb的相同文件进行了测试,这个错误有时会发生(1/10)不是每次都有。有什么解决办法吗?我也得到了同样的例外。两年后我也得到了。有什么解决办法吗?