2

成功地使用 HttpURLConnection 上传*.txt 文件。现在我的任务是更改上传每种文件类型的程序。我用.xls 文件尝试了我的程序。文件放在服务器上,但内容不可读。

就像你在这里看到的:

Ãá±á>þÿ Å'¸äÌÌÌS Sheet1Sheet2Sheet3Worksheets4 $€,þÿ3à …ŸòùOh«‘+'³Ù0Å“8Å'@ x„äMicrosoft CorporationMicrosoft Excel@â€Ã¸(º»þÿ3à…ŸòùOh«‘+'³Ù0Ëœ8Å’@x„äMicrosoft公司Microsoft Excel@â€Ã¸(º»@â€Ã¸(º»Ì�á°Ãâ\pMicrosoft Corporation

这是我的代码片段:

    HttpURLConnection urlConn = (HttpURLConnection) new URL(testdocumentURL).openConnection(); 
    urlConn.setRequestMethod("POST");
    urlConn.setRequestProperty("X-Method-Override", "PUT");     
    urlConn.setRequestProperty("Content-Type", "text/xml"); 
    urlConn.setRequestProperty("Authorization", "Basic "+ Client.getPassword());
    urlConn.setUseCaches(false);
    urlConn.setDoInput(true);
    urlConn.setDoOutput(true);
    urlConn.setFollowRedirects(false);
    urlConn.setRequestProperty("Slug", "Connectiontest/test.xls"); 
    String write = readFile(test.xls);
    urlConn.setRequestProperty("Content-Length","" + write.length());
    urlConn.getOutputStream().write(write.getBytes("UTF8"));

在我看来,有两种方法可以解决这个问题。

  1. 在 .write(write.getBytes("UTF8")) 处更改输出
  2. 改变输入

目前我读的文件是这样的:

    readFile(String test){
    BufferedReader reader = new BufferedReader(new FileReader(test));
    String line = null;
    StringBuilder stringBuilder = new StringBuilder();
    String ls = System.getProperty("line.separator");

    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
        stringBuilder.append(ls);
    }
    reader.close();
    return stringBuilder.toString();
    }

我尝试以这种方式更改 RequestProperty() :

connection.setRequestProperty("content-type", "multipart/form-data");

或者

connection.setRequestProperty("content-type", "application/vnd.ms-excel");

有人知道像这样上传 .xls 文件吗?我的老板说,我必须更喜欢HttpURLConnector 。:/

非常感谢!

4

2 回答 2

1

不要将 Excel 文件视为String. 改为readFile将文件读入 a byte[],然后将其写入连接输出流。

于 2012-09-11T14:32:44.780 回答
0

将内容类型设置为 application/vnd.ms-excel 然后试一试

于 2012-09-11T14:49:32.970 回答