java - 使用 HTTP 连接从 Java 上传文件

标签 java http upload

我正在尝试从在浏览器中运行的小程序上传文件(日志文件)。我正在读取字符串中的文件。以下函数,给定一个字符串数据和一个字符串 URL(例如:http://192.168.0.166:8380/app/customer/UploadData.do),将数据上传到一个 URL。因为在超时后,与服务器的 session 丢失。因此,我在 URL 中附加了用户名和密码,以避免任何 session 过期问题(因为此上传应该是自动的,无需任何手动输入等)。 URL(非公开)类似于:

http://192.168.0.166:8380/app/customer/UploadData.do?username=uname&password=pword

public static void sendData(String aData, String aURL) throws Exception {
    try {
        byte[] myData = aData.getBytes();
        /* Uploading the data */
        URL myURL = new URL(aURL);
        HttpURLConnection myConnection = (HttpURLConnection) myURL.openConnection();
        myConnection.setDoOutput(true);
        myConnection.setUseCaches(false);
        myConnection.setDefaultUseCaches(false);
        myConnection.setRequestProperty("Content-type", "application/octet-stream");
        OutputStream myOutputStream = myConnection.getOutputStream();
        myOutputStream.write(myData);
        myOutputStream.flush();
        myOutputStream.close();

        int status = ((HttpURLConnection) myConnection).getResponseCode();

    } catch (Exception exception) {
        throw exception
    }
}

只要与服务器的 session 处于 Activity 状态,此功能就绝对可以正常工作。它在例如 session 过期或用户注销时不起作用(小程序全天候运行 24/7)。请注意,当通过网络浏览器访问时,上述 URL 工作正常。它是这个 java 代码(小程序),当 session 过期时无法再次连接。如果有人能指出我在这里做错了什么,那将很有帮助。任何帮助将不胜感激。

环境:Jboss 作为应用程序服务器,JBoss Secured Realm 用于登录。

最佳答案

您正在查询的网页是否接受登录并根据您发送的用户名/密码参数创建新 session ?

如果用户通过标准方法登录网站(例如,他们在浏览器中输入详细信息的登录页面),那么这将创建一个 cookie,该 cookie 来回发送,将他们标识为网站的“所有者”该 session 并对它们进行身份验证(直到超时)。如果他们随后运行您的小程序,那么您的小程序将最终搭载该 session 和 cookie,直到它过期。

如果它确实过期,您的小程序将需要做与用户登录时所做的相同的事情,很可能对登录页面执行 HTTP POST,除非上传页面明确接受用户名和密码并且不需要 session 或创建一个那么你正在尝试的将不起作用。

不过,您可以查看表单的登录页面,让您的小程序查询该页面,解析 cookie 的输出 HTTP header ,然后在上传时将其传回。

如果做不到这一点,一个简单的解决方案可能是让您的小程序定期(每小时或 20 分钟一次)简单地查询网站以防止 session 超时。它不一定需要上传 - 它可能可以查询任何受限页面。

关于java - 使用 HTTP 连接从 Java 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8309008/

相关文章:

apache - URL 中是否允许使用方括号?

php - HTTP 主机名大小写(大写/小写)重要吗?

flask - Request.files 400 flask 中的错误请求

ios - 快速测量上传速度

java - 如何匹配java正则表达式中的字符串结尾或空格

java - Android USB 转串口接收错误

java - 使用条形码编号获取产品信息,如名称、价格等

java - 使用 Jackson 反序列化时如何放宽命名策略?

json - 如何将小写名称 JSON 解码到我的结构中?

HTML/CSS 表单样式