Android,http:如何将文件上传到由共享服务器托管的站点?

Posted

技术标签:

【中文标题】Android,http:如何将文件上传到由共享服务器托管的站点?【英文标题】:Android, http: How to upload a file to a site hosted by a shared server? 【发布时间】:2011-06-04 19:57:07 【问题描述】:

我给自己买了一个网站,它托管在一个使用 cpanel 共享一个 IP 地址的 linux 服务器上。问题是,现在,我想使用此代码将文件上传到我的网站。每次我使用像 www.site 这样的站点地址时,我都会收到一个异常,指出 URL 格式错误。当我使用 IP 地址时(因为这是一个共享服务器),我找不到我的 php 代码,因为我不知道如何链接到我的地址。

有人...有人知道如何将我链接到我的网站,这样我就可以上传一个 xml 文件吗?这里真的需要帮助......

任何帮助将不胜感激,因为我对网络知识一无所知。

    HttpURLConnection connection = null; 
    DataOutputStream outputStream = null;
    DataInputStream inputStream = null;
    String pathToOurFile = "/data/data/test.send/testsend.txt";
    String urlServer = "http://www.site.com/filefortransfer.php";
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary =  "*****";

    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1*1024*1024;

    try
    
    FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile) );

    URL url = new URL(urlServer);
    connection = (HttpURLConnection) url.openConnection();

    // Allow Inputs & Outputs
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);

    // Enable POST method
    connection.setRequestMethod("POST");

    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

    outputStream = new DataOutputStream( connection.getOutputStream() );
    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd);
    outputStream.writeBytes(lineEnd);

    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    buffer = new byte[bufferSize];

    // Read file
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    while (bytesRead > 0)
    
    outputStream.write(buffer, 0, bufferSize);
    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    

    outputStream.writeBytes(lineEnd);
    outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

    // Responses from the server (code and message)
    String serverResponseCode = Integer.toString(connection.getResponseCode());
    String serverResponseMessage = connection.getResponseMessage();

    fileInputStream.close();
    outputStream.flush();
    outputStream.close();

    
    catch (Exception ex)
    
        Log.e("MediaPlayer", "error: " + ex.getMessage(), ex);
    
    

【问题讨论】:

【参考方案1】:

android 上,更复杂的 HTTP 网络最好使用 HttpClient 类。

这里是一个分段文件上传的例子:http://rapidandroid.org/wiki/HttpUpload

【讨论】:

我已经尝试了代码并放入了 apache httpcomponents、客户端和核心,但我得到了 org.apache.james.mime4j.message.SingleBody 类型无法解析。它是从包区域所需的 .class 文件中间接引用的。我该如何解决这个问题?我正在使用 Eclipse 上的 android,我尝试寻找解决方案,但找不到任何解决方案。 通过将 org.apache.james.mime4j 库添加到我的参考资料中解决了这个问题 出现了一个新问题。日志出来告诉我这个问题,java.lang.noclassdeffounderror: org.apache.http.entity.mime,我有库,怎么了? 也许这篇文章会有所帮助:***.com/questions/3482674/… 感谢您的回答,我已经尝试了显示给我的解决方案,但它也不起作用,错误仍然相同。

以上是关于Android,http:如何将文件上传到由共享服务器托管的站点?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何将 .mp3 文件上传到 http 服务器?

管理将破坏性数据库更改迁移到由同一应用程序的旧版本共享的数据库

MSBuild:如何将文件复制到由执行命令的输出确定的 DestinationFolder?

如何将标题添加到由 XSLT 样式表转换的 HTML?

访问共享首选项以进行多部分上传时,Android 上的 Java 错误

将文件名信息附加到由 sc.textFile 初始化的 RDD