2014-03-26 23 views
3

是否可以將文件附件嵌入到JSON對象中?我有一個HTML表單,它有幾個文本字段輸入和一個文件附件。我想發送一個包含所有這些表單數據(包括文件附件)的JSON對象到服務器。在JSON對象中嵌入文件附件

Java中是否有任何特定的庫可以做到這一點?你能爲此提供可能的解決方案嗎?

感謝

+0

http://stackoverflow.com/questions/1443158/binary-data-in-json-string-something-better-than-base64 – Jonline

回答

4

如果你要發送的文件的實際數據,你可能希望將其編碼爲Base64字符串,併發送你的JSON - 看到小提琴,例如在JavaScript編碼它的:

http://jsfiddle.net/eliseosoto/JHQnk/

那麼你可以做使用任何語言和/或圖書館適用於服務器端的對面。

+0

編碼爲base64也將受到〜增加文件大小33%,但如果你確定,這是完成工作的一個非常簡單的方法。 – Yuval

+0

@YuvalBoss我想你是對的。這是一個問題。較大的文件附件創建龐大的JSON對象。這是一個缺點。就我提出的問題而言,這似乎是正確的答案,並且工作起來。 –

1

使用MultipartEntity,別人發佈了類似的問題:How to send file in JSON on android? 您也可以考慮將文件保存在服務器上,並將路徑/ URL發送到其他服務器可以訪問它們的文件位置。

public String SendToServer(String aUrl,File Filename) 
     { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(filename); 

      try 
      { 
       MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
       entity.addPart("file", new FileBody(Filename)); 
       entity.addPart("video-title", new StringBody("Video")); 
       entity.addPart("video-type", new StringBody("1")); 
       httpPost.setEntity(entity); 

       HttpContext context = new BasicHttpContext(); 
       // Bind custom cookie store to the local context 
       context.setAttribute(ClientContext.COOKIE_STORE, Globals.sessionCookie); 

       HttpResponse response = httpClient.execute(httpPost, context); 
       HttpEntity resEntity = response.getEntity(); 
       String Response = ""; 
       if (response != null) 
       {  
        Response = EntityUtils.toString(resEntity); 
       } 
       return Response; 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

      return "Exception"; 
     } 
+0

我想就可持續解決方案而言,將文件上傳到文件服務器並將文件url與請求進行映射是一個不錯的選擇。感謝您的建議。 –