0

私の英語はあまり良くありません 私はこのコードをサーバーに並べて、写真をアップロードできますか しかし私はどのように進歩バーで量を表示できますかアップロードの写真、 私を助けてください...写真をアップロードするときにプログレスバーを表示

public class processUpload extends AsyncTask<String ,Integer,JSONObject>{ 
    String requestURL; 
    String charset = "UTF-8"; 
    JSONObject jsonResponse; 
    private File[] files; 
    public processUpload(File[] file) { 
     this.files = file; 
    } 
    @Override 
    protected void onPreExecute() { 
     requestURL = G.DOMEAIN+"/photo"; 

     pDialog = new ProgressDialog(ActivityUpload.this); 
      pDialog.setTitle("Upload Images"); 
      pDialog.setMessage("pl wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 


    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
    // pDialog.setProgress(values[0]); 
    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 

     try { 
      final FileUploader multipart = new FileUploader(requestURL, charset); 

      multipart.addHeaderField("User-Agent", "CodeJava"); 
      multipart.addHeaderField("Test-Header", "Header-Value"); 

      multipart.addFormField("description", "Cool Pictures"); 
      multipart.addFormField("keywords", "Java,upload,Spring"); 
      multipart.addFormUserId("userId", UserInfo.USER_ID); 


      for (int i = 0; i < G.selectImages.size(); i++) { 

        multipart.addFilePart("images[]", sourceFile[i]); 

      } 


     /*multipart.addFilePart("fileUpload", uploadFile1); 
     multipart.addFilePart("fileUpload", uploadFile2);*/ 

      List<String> response = multipart.finish(); 

      System.out.println("SERVER REPLIED:"); 

      for (String line : response) { 
       System.out.println(line); 
      } 
      jsonResponse = new JSONObject(response.get(0)); 

     } catch (IOException ex) { 
      System.err.println(ex); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return jsonResponse; 
    } 

    @Override 
    protected void onPostExecute(JSONObject json) { 
      //do something 
     } 

    } 
} 

と、このFileUploaderクラス

public class FileUploader { 
    private final String boundary; 
    private static final String LINE_FEED = "\r\n"; 
    private HttpURLConnection httpConn; 
    private String charset; 
    private OutputStream outputStream; 
    private PrintWriter writer; 

    public FileUploader(String requestURL, String charset) 
      throws IOException { 
     this.charset = charset; 

     // creates a unique boundary based on time stamp 
     boundary = "===" + System.currentTimeMillis() + "==="; 

     URL url = new URL(requestURL); 
     httpConn = (HttpURLConnection) url.openConnection(); 
     httpConn.setUseCaches(false); 
     httpConn.setDoOutput(true); // indicates POST method 
     httpConn.setDoInput(true); 
     httpConn.setRequestProperty("Content-Type", 
       "multipart/form-data; boundary=" + boundary); 
     httpConn.setRequestProperty("User-Agent", "CodeJava Agent"); 
     httpConn.setRequestProperty("Test", "Bonjour"); 
     outputStream = httpConn.getOutputStream(); 
     writer = new PrintWriter(new OutputStreamWriter(outputStream, charset), 
       true); 


    }  
    /** 
    * Adds a form field to the request 
    * @param name field name 
    * @param value field value 
    */ 
    public void addFormField(String name, String value) { 
     writer.append("--" + boundary).append(LINE_FEED); 
     writer.append("Content-Disposition: form-data; name=\"" + name + "\"") 
       .append(LINE_FEED); 
     writer.append("Content-Type: text/plain; charset=" + charset).append(
       LINE_FEED); 
     writer.append(LINE_FEED); 
     writer.append(value).append(LINE_FEED); 
     writer.flush(); 
    } 
    /** 
    * Adds a form field to the request 
    * @param name field name 
    * @param value field value 
    */ 
    public void addFormUserId(String name, String value) { 
     writer.append("--" + boundary).append(LINE_FEED); 
     writer.append("Content-Disposition: form-data; name=\"" + name + "\"") 
       .append(LINE_FEED); 
     writer.append("Content-Type: text/plain; charset=" + charset).append(
       LINE_FEED); 
     writer.append(LINE_FEED); 
     writer.append(value).append(LINE_FEED); 
     writer.flush(); 
    } 

    /** 
    * Adds a upload file section to the request 
    * @param fieldName name attribute in <input type="file" name="..." /> 
    * @param uploadFile a File to be uploaded 
    * @throws IOException 
    */ 
    public void addFilePart(String fieldName, File uploadFile) 
      throws IOException { 
     String fileName = uploadFile.getName(); 
     writer.append("--" + boundary).append(LINE_FEED); 
     writer.append(
       "Content-Disposition: form-data; name=\"" + fieldName 
         + "\"; filename=\"" + fileName + "\"") 
       .append(LINE_FEED); 
     writer.append(
       "Content-Type: " 
         + URLConnection.guessContentTypeFromName(fileName)) 
       .append(LINE_FEED); 
     writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED); 
     writer.append(LINE_FEED); 
     writer.flush(); 

     FileInputStream inputStream = new FileInputStream(uploadFile); 

     byte[] buffer = new byte[4096]; 
     int bytesRead = -1; 
     int totalByteRead = 0; 


     int n=1; 
     while ((bytesRead = inputStream.read(buffer)) != -1) { 
      totalByteRead += bytesRead; 
      outputStream.write(buffer, 0, bytesRead); 

     } 
     outputStream.flush(); 
     inputStream.close(); 

     writer.append(LINE_FEED); 
     writer.flush(); 
    } 

    /** 
    * Adds a header field to the request. 
    * @param name - name of the header field 
    * @param value - value of the header field 
    */ 
    public void addHeaderField(String name, String value) { 
     writer.append(name + ": " + value).append(LINE_FEED); 
     writer.flush(); 
    } 

    /** 
    * Completes the request and receives response from the server. 
    * @return a list of Strings as response in case the server returned 
    * status OK, otherwise an exception is thrown. 
    * @throws IOException 
    */ 
    public List<String> finish() throws IOException { 
     List<String> response = new ArrayList<String>(); 

     writer.append(LINE_FEED).flush(); 
     writer.append("--" + boundary + "--").append(LINE_FEED); 
     writer.close(); 

     // checks server's status code first 
     int status = httpConn.getResponseCode(); 
     if (status == HttpURLConnection.HTTP_OK) { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        httpConn.getInputStream())); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       response.add(line); 
      } 
      reader.close(); 
      httpConn.disconnect(); 
     } else { 
      throw new IOException("Server returned non-OK status: " + status); 
     } 

     return response; 
    } 
} 

答えて

0

ファイルアップロード

のために以下のコードを確認してください
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.content.InputStreamBody; 
import org.apache.http.entity.mime.content.StringBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.CoreProtocolPNames; 
import org.apache.http.util.EntityUtils; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ScrollView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener { 

final static int REQUEST_CODE = 1; 
final static String[]BUTTON_LABEL = {"Select Image","Upload Image"}; 

// CHANGE THIS TO YOUR URL 
final static String UPLOAD_SERVER_URI = "http://192.168.25.117/android/UploadToServer.php"; 

ProgressDialog progressDialog; 
ScrollView scrollView; 
LinearLayout linearLayout; 
ImageView imageView; 
TextView imageLocationTextView; 
Button selectImgBtn; 
Button uploadBtn; 

String imagePath; 
String imageName; 

long imageSize = 0; // kb 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setupLayout(); 
    } 
    /** 
    * 
    */ 
    private void setupLayout(){ 

    scrollView = new ScrollView(this); 
    linearLayout = new LinearLayout(this); 
    imageView = new ImageView(this); 
    imageLocationTextView = new TextView(this); 
    selectImgBtn = new Button(this); 
    uploadBtn = new Button(this); 


    selectImgBtn.setText(BUTTON_LABEL[0]); 
    uploadBtn.setText(BUTTON_LABEL[1]); 
    selectImgBtn.setOnClickListener(this); 
    uploadBtn.setOnClickListener(this); 

    linearLayout.setOrientation(LinearLayout.VERTICAL); 
    linearLayout.addView(imageView); 
    linearLayout.addView(imageLocationTextView); 
    linearLayout.addView(selectImgBtn); 
    linearLayout.addView(uploadBtn); 

    scrollView.addView(linearLayout); 

    this.setContentView(scrollView); 
    } 
    /** 
    * 
    * @return 
    */ 
    private ProgressDialog createDialog(){ 
    ProgressDialog progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Please wait.. Uploading File"); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     progressDialog.setCancelable(false); 

     return progressDialog; 
    } 

@Override 
public void onClick(View view) { 

    String viewLabel = ((Button)view).getText().toString(); 

    if(viewLabel.equalsIgnoreCase(BUTTON_LABEL[0])){ 
    // SELECT IMAGE 

    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Image"), REQUEST_CODE); 

    }else{ 

    // UPLOAD IMAGE 

    if(this.imagePath == null){ 
    // IF NO IMAGE SELECTED DO NOTHING 
    Toast.makeText(this, "No image selected", Toast.LENGTH_SHORT).show(); 
    return; 
    } 

    this.progressDialog = this.createDialog(); 
    this.progressDialog.show(); 

    // EXECUTED ASYNCTASK TO UPLOAD IMAGE 
    new ImageUploader().execute(); 

    } 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){ 

    Uri selectedImageUri = data.getData(); 

    // GET IMAGE PATH 
    imagePath = getPath(selectedImageUri); 


    // IMAGE NAME 
    imageName = imagePath.substring(imagePath.lastIndexOf("/")); 

    imageSize = this.getFileSize(imagePath); 

    // DECODE TO BITMAP 
    Bitmap bitmap=BitmapFactory.decodeFile(imagePath); 

    // DISPLAY IMAGE 
    imageView.setImageBitmap(bitmap); 
    imageLocationTextView.setText("File path :" +imagePath); 

    } 
} 

/** 
    * Get the image path 
    * @param uri 
    * @return 
    */ 
private String getPath(Uri uri) { 
     String[] projection = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
/** 
    * Get the file size in kilobytes 
    * @return 
    */ 
private long getFileSize(String imagePath){ 

    long length = 0; 

    try { 

    File file = new File(imagePath); 
    length = file.length(); 
    length = length/1024; 

    } catch (Exception e) { 

    e.printStackTrace(); 
    } 

    return length; 
} 

/** 
    * This class is responsible for uploading data 
    * @author lauro 
    * 
    */ 
    private class ImageUploader extends AsyncTask<Void, Integer, Boolean> implements UploadProgressListener { 

    @Override 
    protected Boolean doInBackground(Void... params) { 

      try{ 

      InputStream inputStream = new FileInputStream(new File(imagePath)); 

       //*** CONVERT INPUTSTREAM TO BYTE ARRAY 

       byte[] data = this.convertToByteArray(inputStream); 

       HttpClient httpClient = new DefaultHttpClient(); 
       httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,System.getProperty("http.agent")); 

       HttpPost httpPost = new HttpPost(UPLOAD_SERVER_URI); 

       // STRING DATA 
       StringBody dataString = new StringBody("This is the sample image"); 

       // FILE DATA OR IMAGE DATA 
       InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data),imageName); 

      // MultipartEntity multipartEntity = new MultipartEntity(); 
       CustomMultiPartEntity multipartEntity = new CustomMultiPartEntity(); 

       // SET UPLOAD LISTENER 
       multipartEntity.setUploadProgressListener(this); 

       //*** ADD THE FILE 
       multipartEntity.addPart("file", inputStreamBody); 

       //*** ADD STRING DATA 
       multipartEntity.addPart("description",dataString); 

       httpPost.setEntity(multipartEntity); 

       // EXECUTE HTTPPOST 
       HttpResponse httpResponse = httpClient.execute(httpPost); 

       // THE RESPONSE FROM SERVER 
       String stringResponse = EntityUtils.toString(httpResponse.getEntity()); 

       // DISPLAY RESPONSE OF THE SERVER 
       Log.d("data from server",stringResponse); 



      } catch (FileNotFoundException e1) { 
       e1.printStackTrace(); 

       return false; 

      } catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    return false; 

    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    return false; 
    } 

    return true; 
    } 

    /** 
    * 
    */ 
    @Override 
    public void transferred(long num) { 

    // COMPUTE DATA UPLOADED BY PERCENT 

    long dataUploaded = ((num/1024) * 100)/imageSize; 

    // PUBLISH PROGRESS 

    this.publishProgress((int)dataUploaded); 

    } 

    /** 
    * Convert the InputStream to byte[] 
    * @param inputStream 
    * @return 
    * @throws IOException 
    */ 
    private byte[] convertToByteArray(InputStream inputStream) throws IOException{ 

     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

     int next = inputStream.read(); 
     while (next > -1) { 
       bos.write(next); 
       next = inputStream.read(); 
      } 

     bos.flush(); 

     return bos.toByteArray(); 
    } 



    @Override 
    protected void onProgressUpdate(Integer... values) { 
    super.onProgressUpdate(values); 

    // UPDATE THE PROGRESS DIALOG 

    progressDialog.setProgress(values[0]); 



    } 

    @Override 
    protected void onPostExecute(Boolean uploaded) { 
    // TODO Auto-generated method stub 
    super.onPostExecute(uploaded); 


    if(uploaded){ 

    // UPLOADING DATA SUCCESS 

    progressDialog.dismiss(); 
    Toast.makeText(MainActivity.this, "File Uploaded", Toast.LENGTH_SHORT).show(); 


    }else{ 

    // UPLOADING DATA FAILED 

    progressDialog.setMessage("Uploading Failed"); 
    progressDialog.setCancelable(true); 


    } 


    } 



    } 


} 

詳細は下記のリンクをご覧ください。

http://justsimpleinfo.blogspot.in/2014/07/android-upload-file-to-server-with-data.html

それは参考になりましかもしれない願っています。

関連する問題