2015-11-09 43 views
0

我有C#如何将多个文件发送到web服务

[HttpPost] 
    public JsonResult PostFileToServers(HttpPostedFileBase[] files) 
    { 
     foreach (var file in files) 
     { 
      var fileStorage = @"C:\Users\Aka\Dropbox\SMAC\file-upload"; 

      if (!Directory.Exists(fileStorage)) 
       Directory.CreateDirectory(fileStorage); 

      var fileName = Path.Combine(fileStorage, string.Format("{0}.wav", DateTime.Now)); 
      file.SaveAs(fileName); 
     } 

     var jsonResponseModel = new JsonResponseModel(); 
     jsonResponseModel.Status = (int)ResponseStatus.Successful; 

     return Json(jsonResponseModel); 

    } 

我想通过上面的Web服务发送android的多个文件编写一个Web服务。这是我的代码,但它没有发送文件到Webservice。任何人都有解决方案?

public void uploadtoserver(String filepath1,String filepath2,String filepath3) throws IOException 
{ 


    HttpClient client = new DefaultHttpClient(); 

     HttpResponse response = null; 

      HttpPost httpost = new HttpPost(URL); 

      MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
      File file1 = new File (filepath1); 
      File file2 = new File (filepath2); 
      File file3 = new File (filepath3); 

      entity.addPart("files[0]", new FileBody(file1)); 
      entity.addPart("files[1]", new FileBody(file2)); 
      entity.addPart("fIles[2]", new FileBody(file3)); 
      httpost.setEntity(entity); 
      response = client.execute(httpost); 

     } 

回答

0

我已经查一些关于Android的,它不依赖于你的POST API 要发送一个文件,你需要“打开”一个HttpURLConnection的服务器,并FileInputSteam读取文件,代码像下面

public class HttpFileUpload implements Runnable{ 
    URL connectURL; 
    String responseString; 
    String Title; 
    String Description; 
    byte[ ] dataToServer; 
    FileInputStream fileInputStream = null; 

    HttpFileUpload(String urlString, String vTitle, String vDesc){ 
      try{ 
        connectURL = new URL(urlString); 
        Title= vTitle; 
        Description = vDesc; 
      }catch(Exception ex){ 
       Log.i("HttpFileUpload","URL Malformatted"); 
      } 
    } 

    void Send_Now(FileInputStream fStream){ 
      fileInputStream = fStream; 
      Sending(); 
    } 

    void Sending(){ 
      String iFileName = "ovicam_temp_vid.mp4"; 
      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "*****"; 
      String Tag="fSnd"; 
      try 
      { 
        Log.e(Tag,"Starting Http File Sending to URL"); 

        // Open a HTTP connection to the URL 
        HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection(); 

        // Allow Inputs 
        conn.setDoInput(true); 

        // Allow Outputs 
        conn.setDoOutput(true); 

        // Don't use a cached copy. 
        conn.setUseCaches(false); 

        // Use a post method. 
        conn.setRequestMethod("POST"); 

        conn.setRequestProperty("Connection", "Keep-Alive"); 

        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); 

        DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); 

        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"title\""+ lineEnd); 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(Title); 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + lineEnd); 

        dos.writeBytes("Content-Disposition: form-data; name=\"description\""+ lineEnd); 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(Description); 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + lineEnd); 

        dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + iFileName +"\"" + lineEnd); 
        dos.writeBytes(lineEnd); 

        Log.e(Tag,"Headers are written"); 

        // create a buffer of maximum size 
        int bytesAvailable = fileInputStream.available(); 

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

        // read file and write it into form... 
        int bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        while (bytesRead > 0) 
        { 
          dos.write(buffer, 0, bufferSize); 
          bytesAvailable = fileInputStream.available(); 
          bufferSize = Math.min(bytesAvailable,maxBufferSize); 
          bytesRead = fileInputStream.read(buffer, 0,bufferSize); 
        } 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // close streams 
        fileInputStream.close(); 

        dos.flush(); 

        Log.e(Tag,"File Sent, Response: "+String.valueOf(conn.getResponseCode())); 

        InputStream is = conn.getInputStream(); 

        // retrieve the response from server 
        int ch; 

        StringBuffer b =new StringBuffer(); 
        while((ch = is.read()) != -1){ b.append((char)ch); } 
        String s=b.toString(); 
        Log.i("Response",s); 
        dos.close(); 
      } 
      catch (MalformedURLException ex) 
      { 
        Log.e(Tag, "URL error: " + ex.getMessage(), ex); 
      } 

      catch (IOException ioe) 
      { 
        Log.e(Tag, "IO error: " + ioe.getMessage(), ioe); 
      } 
    } 

    @Override 
    public void run() { 
      // TODO Auto-generated method stub 
    } 
} 

public void UploadFile(){ 
    try { 
     // Set your file path here 
     FileInputStream fstrm = new FileInputStream(Environment.getExternalStorageDirectory().toString()+"/DCIM/file.mp4"); 

    // Set your server page url (and the file title/description) 
     HttpFileUpload hfu = new HttpFileUpload("http://10.20.16.67:27010/Home/PostFileToServers", "my file title","my file description"); 

     hfu.Send_Now(fstrm); 

    } catch (FileNotFoundException e) { 
     // Error: File not found 
    } 
}