2013-10-22 192 views
-2

嗨,所以我設法發送文件從應用程序到服務器,但它會返回503(文件不存在)後,我發送到服務器。任何人都可以查看我的代碼,請android--上傳文件到服務器,但無法保存文件在服務器

錯誤:HTTP響應是:服務暫時不可用:503 我應該得到502如果文件存在,或200 OK如果文件上傳

這是java功能。

private int upload(String uri_) 
{ 
    String fileName = uri_; 

    HttpURLConnection conn = null; 
    DataOutputStream dos = null; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File sourceFile = new File(uri_); 

    if (!sourceFile.isFile()) { 

     dialog.dismiss(); 

     Log.e("uploadFile", "Source File not exist :" 
          +fileName); 


     return 0; 

    } 

    else 
    { 
     try { 

       // open a URL connection to the Servlet 
      FileInputStream fileInputStream = new FileInputStream(sourceFile); 
      URL url = new URL(url_); 

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

      // Allow Inputs & Outputs 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 
      conn.setUseCaches(false); 

      // Enable POST method 
      conn.setRequestMethod("POST"); 

      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.setRequestProperty("Content-Type", "multipart/form-data;boundary"); 

      dos = new DataOutputStream(conn.getOutputStream()); 
      dos.writeBytes(twoHyphens + boundary + lineEnd); 
      dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + fileName); 
      dos.writeBytes(lineEnd); 

      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); 

      // Responses from the server (code and message) 
      serverResponseCode = conn.getResponseCode(); 

      String serverResponseMessage = conn.getResponseMessage(); 

      Log.i("uploadFile", "HTTP Response is : " 
        + serverResponseMessage + ": " + serverResponseCode); 
      if(serverResponseCode == 200){ 

       runOnUiThread(new Runnable() { 
         public void run() { 


          Toast.makeText(PhotoActivity.this, "File Upload Complete.", 
             Toast.LENGTH_SHORT).show(); 
         } 
        });     
      }  

      //close the streams // 
      fileInputStream.close(); 
      dos.flush(); 
      dos.close(); 

     } catch (MalformedURLException ex) { 

      dialog.dismiss(); 
      ex.printStackTrace(); 

      runOnUiThread(new Runnable() { 
       public void run() { 

        Toast.makeText(PhotoActivity.this, "MalformedURLException", 
                 Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
     } 
     catch (Exception e) { 

      dialog.dismiss(); 
      e.printStackTrace(); 

      runOnUiThread(new Runnable() { 
       public void run() { 

        Toast.makeText(PhotoActivity.this, "Got Exception : see logcat ", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      Log.e("Upload file to server Exception", "Exception : " 
               + e.getMessage(), e); 
     } 
     dialog.dismiss();  
     return serverResponseCode; 

     } // End else block 

} 

的PHP部分

<?php 
$tar="./"; 
$src=$_FILES['uploadedfile']['name']; 
$tar=$tar . basename($src); 
if(file_exists($src)) 
{ 
if(move_uploaded_file($src,$tar)) 
{ 
echo "success"; 
} 
else 
{header("Server Error",ture,502);} 
} 
else 
{header("Server Error",ture,503);} 
?> 
+0

請清楚你的問題。 – Droid

+0

http://php.net/manual/de/function.header.php頭文件必須返回一個布爾值,而不是'ture' :)並且不要關閉你的php腳本,只要移除'?>' –

+0

我想上傳一個圖片從手機存儲到服務器,但從未上傳。我使用頭來跟蹤文件的說明,它似乎像PHP不識別我的圖像文件。問題是我做錯了什麼,所以服務器無法從android應用程序接收我的圖像!? – user2906043

回答

0

用戶這段代碼的Android applciation

package com.example.imageuploaddemo; 

import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class UploadToServer extends Activity { 

TextView messageText; 
Button uploadButton; 
int serverResponseCode = 0; 
ProgressDialog dialog = null; 
String upLoadServerUri = null; 
/********** File Path *************/ 
final String uploadFilePath = "/mnt/sdcard/"; 
final String uploadFileName = "demo.pdf"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_upload_to_server); 

    uploadButton = (Button) findViewById(R.id.uploadButton); 
    messageText = (TextView) findViewById(R.id.messageText); 

    messageText.setText("Uploading file path :- '/mnt/sdcard/" 
      + uploadFileName + "'"); 

    /************* Php script path ****************/ 
    upLoadServerUri = "http://exampleserver/fileuploading.php";//php file path for used to save file 

    uploadButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      dialog = ProgressDialog.show(UploadToServer.this, "", 
        "Uploading file...", true); 

      new Thread(new Runnable() { 
       public void run() { 
        runOnUiThread(new Runnable() { 
         public void run() { 
          messageText.setText("uploading started....."); 
         } 
        }); 

        uploadFile(uploadFilePath + "" + uploadFileName); 

       } 
      }).start(); 
     } 
    }); 
} 

public int uploadFile(String sourceFileUri) { 

    String fileName = sourceFileUri; 
    Log.e("Filena", ""+fileName); 
    HttpURLConnection conn = null; 
    DataOutputStream dos = null; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File sourceFile = new File(sourceFileUri); 
    Log.e("sourceFile", ""+sourceFile.getParent()); 
    if (!sourceFile.isFile()) { 

     dialog.dismiss(); 

     Log.e("uploadFile", "Source File not exist :" + uploadFilePath + "" 
       + uploadFileName); 

     runOnUiThread(new Runnable() { 
      public void run() { 
       messageText.setText("Source File not exist :" 
         + uploadFilePath + "" + uploadFileName); 
      } 
     }); 

     return 0; 

    } else { 
     try { 

      // open a URL connection to the Servlet 
      FileInputStream fileInputStream = new FileInputStream(
        sourceFile); 
      URL url = new URL(upLoadServerUri); 

      // Open a HTTP connection to the URL 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setDoInput(true); // Allow Inputs 
      conn.setDoOutput(true); // Allow Outputs 
      conn.setUseCaches(false); // Don't use a Cached Copy 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      conn.setRequestProperty("Content-Type", 
        "multipart/form-data;boundary=" + boundary); 
      conn.setRequestProperty("uploaded_file", fileName); 

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

      dos.writeBytes(twoHyphens + boundary + lineEnd); 

      // dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename="" 
      // + fileName + """ + lineEnd); 

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

      // 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); 

      // Responses from the server (code and message) 
      serverResponseCode = conn.getResponseCode(); 
      String serverResponseMessage = conn.getResponseMessage(); 

      Log.e("uploadFile", "HTTP Response is : " 
        + serverResponseMessage + ": " + serverResponseCode); 

      if (serverResponseCode == 200) { 

       runOnUiThread(new Runnable() { 
        public void run() { 

         String msg = "File Upload Completed.\n\n See uploaded file here : \n\n" 
           + " http://www.example.com/uploads/" 
           + uploadFileName; 

         messageText.setText(msg); 
         Toast.makeText(UploadToServer.this, 
           "File Upload Complete.", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       }); 
      } 

      // close the streams // 
      fileInputStream.close(); 
      dos.flush(); 
      dos.close(); 

     } catch (MalformedURLException ex) { 

      dialog.dismiss(); 
      ex.printStackTrace(); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        messageText 
          .setText("MalformedURLException Exception : check script url."); 
        Toast.makeText(UploadToServer.this, 
          "MalformedURLException", Toast.LENGTH_SHORT) 
          .show(); 
       } 
      }); 

      Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
     } catch (Exception e) { 

      dialog.dismiss(); 
      e.printStackTrace(); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        messageText.setText("Got Exception : see logcat "); 
        Toast.makeText(UploadToServer.this, 
          "Got Exception : see logcat ", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      Log.e("Upload file to server Exception", 
        "Exception : " + e.getMessage(), e); 
     } 
     dialog.dismiss(); 
     return serverResponseCode; 

    } // End else block 
} 

}

0

我有一個類似的問題,但我將這個權限添加到我的PHP腳本,它爲我解決了它。

chmod($YOUR_TARGET_PATH, 0777); 

那麼試試這個...

<?php 
$tar="./"; 

chmod($tar, 0777); 

$src=$_FILES['uploadedfile']['name']; 
$tar=$tar . basename($src); 
if(file_exists($src)) 
{ 
if(move_uploaded_file($src,$tar)) 
{ 
echo "success"; 
} 
else 
{header("Server Error",ture,502);} 
} 
else 
{header("Server Error",ture,503);} 
?>