如何将图像从SD卡上传到服务器上的文件夹

问题描述:

我想从SD卡上传图像到服务器中的文件夹。我有以下信息 http://mywebsite.myworks.com/parent/webservices/myuploader.ashx(POST)如何将图像从SD卡上传到服务器上的文件夹

Content-Disposition: form-data; name="Filename" 
FilName.jpg 

Content-Disposition: form-data; name="password" 
mypassword 

Content-Disposition: form-data; name="action" 
upload 

Content-Disposition: form-data; name="parentNodeId" 
1297 

Content-Disposition: form-data; name="replaceExisting" 
0 

Content-Disposition: form-data; name="username" 
admin 

Content-Disposition: form-data; name="Filedata"; filename="2012-11-07 11-03-37.jpg" 
Content-Type: application/octet-stream 
[DATA] 

基本上我想要的是上传图片到我已经明白迄今上传到其parentNodeId的文件夹folder.What是1297年,我看到一些教程关于如何将图片上传到php服务器。基于此我写了一个函数。林分享下面

private void doFileUpload() { 
    HttpURLConnection conn = null; 
    DataOutputStream dos = null; 
    DataInputStream inStream = null; 
    String exsistingFileName = "/sdcard/r.jpg"; 

    // Is this the place are you doing something wrong. 
    String lineEnd = "rn"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 

    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    String responseFromServer = ""; 
    String urlString = "http://mywebsite.myworks.com/parent/webservices/myuploader.ashx"; 

    try { 
     // ------------------ CLIENT REQUEST 
     Log.e("UploadMe", "Inside second Method"); 
     FileInputStream fileInputStream = new FileInputStream(new File(exsistingFileName)); 

     // open a URL connection to the Servlet 
     URL url = new URL(urlString); 

     // Open a HTTP connection to the URL 
     conn = (HttpURLConnection) url.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); 
     conn.setRequestProperty("Content-Type", "application/octet-stream"); 

     dos = new DataOutputStream(conn.getOutputStream()); 
     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"Filename\";filename=\"" 
     + exsistingFileName + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"Filename\";filename=\"" 
       + "r.jpg" + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"password\";filename=\"" 
       + "mypassword" + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"action\";filename=\"" 
       + "upload" + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"parentNodeId\";filename=\"" 
       + "-1" + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"replaceExisting\";filename=\"" 
       + "0" + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"username\";filename=\"" 
       + "admin" + "\"" + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"Filedata\";filename=\"" 
       + "2012-11-07 11-03-37.jpg" + "\"" + lineEnd); 

     dos.writeBytes(twoHyphens + boundary + lineEnd); 

     dos.writeBytes(lineEnd); 
     Log.e("UploadMe", "Headers are written"); 

     // create a buffer of maximum size 
     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     buffer = new byte[bufferSize]; 

     // read file and write it into form... 
     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); 
     } 

     // send multipart form data necesssary after file data... 
     dos.writeBytes(lineEnd); 
     dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

     // close streams 
     Log.e("UploadMe", "File is written"); 
     fileInputStream.close(); 
     dos.flush(); 
     dos.close(); 

    } 

    catch (MalformedURLException ex) 

    { 

     Log.e("UploadMe", "error: " + ex.getMessage(), ex); 

    } 

    catch (IOException ioe) 

    { 

     Log.e("UploadMe", "error: " + ioe.getMessage(), ioe); 

    } 

    // ------------------ read the SERVER RESPONSE 
    try { 
     inStream = new DataInputStream(conn.getInputStream()); 
     String str; 

     while ((str = inStream.readLine()) != null) { 
      Log.e("UploadMe", "Server Response" + str); 
     } 

     inStream.close(); 
    } 

    catch (IOException ioex) { 
     Log.e("UploadMe", "error: " + ioex.getMessage(), ioex); 
    } 

} 

程序而不进行碰撞并即时得到这些从我的日志猫output.But我couldnot看到我的服务器文件夹的任何运行它。

11-22 10:26:39.546: E/UploadMe(3363): Inside second Method 
11-22 10:26:39.843: E/UploadMe(3363): Headers are written 
11-22 10:26:39.851: E/UploadMe(3363): File is written 
11-22 10:26:40.820: E/UploadMe(3363): Server Response<?xml version="1.0"?> 
11-22 10:26:40.820: E/UploadMe(3363): Server Response<MediaResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" success="false" /> 

因为我不知道上传文件到服务器,这是上传文件的方式吗?

+0

试试这个http://*.com/questions/13383833/upload-picture-to-server – Ronnie

一个lib中是可用的呼叫android-async-http-1.4.2.jar利用这一点,你可以上传文件,后弦的数据也

这里是示例代码

RequestParams params = new RequestParams(); 
params.put("fname", "name");// here write your parameter name and its value 
params.put("file", new File(filePath)); // Upload a File 
// params.put("profile_picture2", someInputStream); // Upload an 
// InputStream 
// params.put("profile_picture3", new ByteArrayInputStream(someBytes)); 
// // Upload some bytes 

AsyncHttpClient client = new AsyncHttpClient(); 
client.post(urlServer, params, new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(String arg0) { 
     super.onSuccess(arg0); 
     Log.v("from response", arg0); 
    } 
}); 

这里的jar下载链接

https://github.com/loopj/android-async-http/downloads

看到这个

链接how to Upload image into server in Android?

在这个例子中,他们想同您上传影像服务器,但店文件夹是 Web服务开发者的任务,他实际上不存储图像。

你的任务只是发送图像到服务器。