2011-02-23 81 views
2

你好,我想上传图像从Android模拟器到asp.net服务器。下面的代码可以与服务器通信。当我试图创建一个文本文件来查看从android发送的数据是否成功。但没有文件数据没有发送到服务器。我试图发送纯文本到服务器,但我在服务器上创建的文件没有打印文本。Android的图像上传问题

这里的代码: HttpURLConnection conn = null;

String boundary = "=============="; 

     try 
     { 
      String disposition = "Content-Disposition: form-data; name=\"userfile\"; filename=\"" + filename + ".jpg\""; 
      String contentType = "Content-Type: application/octet-stream"; 

      String t1 = "Content-Disposition: form-data; name=\"test\";"; 
      String t2 = "Content-Type: text/plain"; 

      // This is the standard format for a multipart request 
      StringBuffer requestBody = new StringBuffer(); 
      /* 
      requestBody.append("--"+boundary); 
      requestBody.append('\n'); 
      requestBody.append(disposition); 
      requestBody.append('\n'); 
      requestBody.append(contentType); 
      requestBody.append('\n'); 
      requestBody.append('\n'); 
      requestBody.append(new String(getByteFromStream(stream))); 
      */ 

      requestBody.append('\n'); 
      requestBody.append('\n'); 
      requestBody.append("--"+boundary); 
      requestBody.append('\n'); 
      requestBody.append(t1); 
      requestBody.append('\n'); 
      requestBody.append(t2); 
      requestBody.append('\n'); 
      requestBody.append('\n'); 
      requestBody.append("basdfsdafsadfsad"); 
      requestBody.append("--"+boundary+"--"); 

      // Make a connect to the server 
      URL url = new URL(targetURL); 
      conn = (HttpURLConnection) url.openConnection(); 

      // Put the authentication details in the request 
      /* 
      if (username != null) { 

       String usernamePassword = username + ":" + password; 
       String encodedUsernamePassword = Base64.encodeBytes(usernamePassword.getBytes()); 
       conn.setRequestProperty ("Authorization", "Basic " + encodedUsernamePassword); 
      } 
      */ 
      conn.setDoOutput(true); 
      conn.setDoInput(true); 
      conn.setUseCaches(false); 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("MIME-Version:", "1.0"); 
      conn.setRequestProperty("Content-Type", "multipart/mixed; boundary=" + boundary); 

      // Send the body 
      DataOutputStream dataOS = new DataOutputStream(conn.getOutputStream()); 
      dataOS.writeBytes(requestBody.toString()); 
      dataOS.flush(); 
      dataOS.close(); 

      // Ensure we got the HTTP 200 response code 
      int responseCode = conn.getResponseCode(); 
      if (responseCode != 200) { 
       throw new Exception(String.format("Received the response code %d from the URL %s", responseCode, url)); 
      } 

我的请求正文布局不正确吗?

+0

如果可能的话,你为什么不看原始请求你r服务器? – xandy 2011-02-23 00:27:19

+0

请教我如何查看服务器上的原始数据 – LittleFunny 2011-02-23 01:50:38

回答

8

我使用asp.net作为文件处理程序。下面是你将使用到该文件

String pathToOurFile = "/mnt/sdcard/sysdroid.png";//this will be the file path  String urlServer = "http://yourdomain/fileupload.aspx"; 
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"); 
    connection.setRequestProperty("SD-FileName", "sysdroid.png");//This will be the file name 

    outputStream = new DataOutputStream(connection.getOutputStream()); 
    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); 
    } 

    int serverResponseCode = connection.getResponseCode(); 
    String serverResponseMessage = connection.getResponseMessage(); 
    Log.d("ServerCode",""+serverResponseCode); 
    Log.d("serverResponseMessage",""+serverResponseMessage); 
    fileInputStream.close(); 
    outputStream.flush(); 
    outputStream.close(); 


} 
    catch (Exception ex) 
    { 
     //ex.printStackTrace(); 
     Log.e("Error: ", ex.getMessage()); 
    } 

到目前为止好上传该事件的简单的Android代码。让我们看看asp.net代码。我为此使用了简单的“Web Form”。后面的代码是

protected void Page_Load(object sender, EventArgs e) 
{ 
    string uploadDir = Server.MapPath("~/images"); 
    string imgPath = Path.Combine(uploadDir, Request.Headers["SD-FileName"]); 

    try{   
     byte[]bytes = new byte[Request.InputStream.Length]; 
     Request.InputStream.Read(bytes, 0, bytes.Length); 
     System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes); 
     Bitmap btMap = (Bitmap)System.Drawing.Image.FromStream(ms); 
     btMap.Save(imgPath, ImageFormat.Jpeg); 
     ms.Close(); 
    } 
    catch (Exception exp) 
    {    
     Response.Write(exp.Message); 
    }  
} 

希望这会工作,你有Android和SD卡和asp.net文件夹的读/写权限的知识。

欢呼 Fahar

0

因为您上传两个文件,所以你应该看最后的格式。祝你好运。 6.例子

假设服务器提供了以下HTML:

<FORM ACTION="http://server.dom/cgi/handle" 
     ENCTYPE="multipart/form-data" 
     METHOD=POST> 
What is your name? <INPUT TYPE=TEXT NAME=submitter> 
What files are you sending? <INPUT TYPE=FILE NAME=pics> 
</FORM> 

,并在用户键入“乔吹”的名称字段,并选择一个文本文件 “FILE1.TXT”的答案到'你要发送什么文件?'

客户端可能会发送回以下数据:如果用户也表示了答案 图像文件“file2.gif”到“什么文件你发送”

Content-type: multipart/form-data, boundary=AaB03x 

    --AaB03x 
    content-disposition: form-data; name="field1" 

    Joe Blow 
    --AaB03x 
    content-disposition: form-data; name="pics"; filename="file1.txt" 
    Content-Type: text/plain 

    ... contents of file1.txt ... 
    --AaB03x-- 

,客户端可能客户端可能会发送回 以下数据:

Content-type: multipart/form-data, boundary=AaB03x 

    --AaB03x 
    content-disposition: form-data; name="field1" 

    Joe Blow 
    --AaB03x 
    content-disposition: form-data; name="pics" 
    Content-type: multipart/mixed, boundary=BbC04y 

    --BbC04y 
    Content-disposition: attachment; filename="file1.txt" 
    Content-Type: text/plain 

    ... contents of file1.txt ... 
    --BbC04y 
    Content-disposition: attachment; filename="file2.gif" 
    Content-type: image/gif 
    Content-Transfer-Encoding: binary 

     ...contents of file2.gif... 
    --BbC04y-- 
    --AaB03x-- 

Form-based File Upload in HTML