4
回答
android 使用httpURLConnection 传输文件
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

我想在android 上使用httpURLConnection 往pc传文件。

 HttpURLConnection conn = (HttpURLConnection)server_url.openConnection(); 

执行下面这句话时失败,直接跳到catch语句块中。 

OutputStream dos = conn.getOutputStream(); 

相当于执行conn.connect()异常 。 不知道为什么会这样,调了一天了,求大神们帮忙

举报
韦爵爷
发帖于5年前 4回/2K+阅
共有4个答案 最后回答: 5年前

这个不好说,简单这几行代码看不出什么端倪。 

猜测有这么几种可能

  1. 你没有添加 Intent权限
  2. 你的server_url  本上就就有问题  查看一下地址是否写错了。 
  3. 查看你下你的手机的网络情况 是不是压根就没有网络或者手机网络屏蔽了你需要访问的url

最后提醒你 。 既然调到了  catch语句块  那么一定是有 log输出的  你可以尝试下分析一下log记录  尝试解决 。

顺便 ,如果问问题的时候有log记录 可以附上log记录 分别查找问题所在。 


conn.setDoOutput(true),如果要取得connection的输入流来读取返回数据,conn.setDoInput(true),这两个方法要在connection的connect()前调用( URLConnection objects go through two phases: first they are created, then they are connected. After being created, and before being connected, various options can be specified (e.g., doInput and UseCaches). After connecting, it is an error to try to set them.

引用来自“Chauvet”的答案

conn.setDoOutput(true),如果要取得connection的输入流来读取返回数据,conn.setDoInput(true),这两个方法要在connection的connect()前调用( URLConnection objects go through two phases: first they are created, then they are connected. After being created, and before being connected, various options can be specified (e.g., doInput and UseCaches). After connecting, it is an error to try to set them.
我的代码是这样的,应该是没有问题的,可是一直不对  好无力啊
URL server_url = new URL( "http://10.108.39.50/GetAndroidFile/receive_file.php");
String fileName = upload_files[i].getName();
HttpURLConnection conn = (HttpURLConnection)server_url.openConnection();
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setUseCaches(false);
    conn.setRequestMethod("POST");
           conn.setRequestProperty("connection", "Keep-Alive");  
    conn.setRequestProperty("Charset","UTF-8");
   //设置表单类型和边界符号
    conn.setRequestProperty("Content-Type","multipart/form-data;boundary="+BOUNDARY);
    //http头部
StringBuffer sb = new StringBuffer();
    sb.append("--");
    sb.append(BOUNDARY);
    sb.append("\r\n");
    sb.append("Content-Disposition: form-data; name=\"uploadedfiles\"; filename=\""+fileName+"\""+"\r\n");
    sb.append("Content-Type: application/octet-stream; charset=UTF-8\r\n\r\n");
   
    byte []data = sb.toString().getBytes();
    byte []end_data = ("\r\n--"+BOUNDARY+"--\r\n").getBytes();
    conn.setRequestProperty("Content-Length", String.valueOf(data.length+upload_files[i].length()+end_data.length));
       
//     DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
    OutputStream dos = conn.getOutputStream();
    dos.write(data);
   
    FileInputStream fis = new FileInputStream(upload_files[i]);
   
    int count = 0;
    byte []buff = new byte[1024*8];
    while((count = fis.read(buff))!=-1)
    {
    dos.write(buff,0,count);
    }
    fis.close();
    dos.write(end_data);
    dos.flush();
    dos.close();
   
    InputStream is = conn.getInputStream();
    is.close();
--- 共有 3 条评论 ---
韦爵爷回复 @Chauvet : 嗯 谢谢你的回答 这个问题解决了 因为android在3.0以后规定httpurlconnection的操作不能放在UI线程里做。重新开一个子线程做就好了。 5年前 回复
pseudo你的应用设置访问网络权限了么 5年前 回复
pseudo看看这个文章http://www.codicode.com/art/upload_files_from_android_to_a_w.aspx 5年前 回复
顶部