gpt4 book ai didi

java - 发送图片到服务器

转载 作者:行者123 更新时间:2023-11-29 19:38:31 26 4
gpt4 key购买 nike

我尝试通过手机 (android) 将图像(捕获后)发送到服务器为此,我使用 php 脚本(它已上传到服务器)以及用于发布图像的 JAVA 代码。

php脚本地址: http://nwstudio.esy.es/AndroidFileUpload/uploads/fileUpload.php

在移动设备上点击上传按钮后,我只看到没有错误文本或任何内容的小空窗口(应该有关于上传的消息)

我做错了什么? ;/

PHP:

<?php

// Path to move uploaded files
$target_path = "uploads/";

// array for final json respone
$response = array();

// getting server ip address
$server_ip = gethostbyname(gethostname());

// final file url that is being uploaded
$file_upload_url = 'http://' . $server_ip . '/' . 'AndroidFileUpload' . '/' . $target_path;


if (isset($_FILES['image']['name'])) {
$target_path = $target_path . basename($_FILES['image']['name']);

// reading other post parameters
$email = isset($_POST['email']) ? $_POST['email'] : '';
$website = isset($_POST['website']) ? $_POST['website'] : '';

$response['file_name'] = basename($_FILES['image']['name']);
$response['email'] = $email;
$response['website'] = $website;

try {
// Throws exception incase file is not being moved
if (!move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
// make error flag true
$response['error'] = true;
$response['message'] = 'Could not move the file!';
}

// File successfully uploaded
$response['message'] = 'File uploaded successfully!';
$response['error'] = false;
$response['file_path'] = $file_upload_url . basename($_FILES['image']['name']);
} catch (Exception $e) {
// Exception occurred. Make error flag true
$response['error'] = true;
$response['message'] = $e->getMessage();
}
} else {
// File parameter is missing
$response['error'] = true;
$response['message'] = 'Not received any file!F';
}

// Echo final json response to client
echo json_encode($response);
?>

Java:

package com.nkdroid.tinderswipe;

/**
* Created by Haze on 15.08.2016.
*/

import com.nkdroid.tinderswipe.AndroidMultiPartEntity.ProgressListener;

import java.io.File;
import java.io.IOException;

import org.apache.http.HttpEntity;
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.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;

public class UploadActivity extends Activity {

// LogCat tag
private static final String TAG = TakePhotoActivity.class.getSimpleName();

private ProgressBar progressBar;
private String filePath = null;
private TextView txtPercentage;
private ImageView imgPreview;
private VideoView vidPreview;
private Button btnUpload;
long totalSize = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upload);
txtPercentage = (TextView) findViewById(R.id.txtPercentage);
btnUpload = (Button) findViewById(R.id.btnUpload);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
imgPreview = (ImageView) findViewById(R.id.imgPreview);
vidPreview = (VideoView) findViewById(R.id.videoPreview);

// Receiving the data from previous activity
Intent i = getIntent();

// image or video path that is captured in previous activity
filePath = i.getStringExtra("filePath");

// boolean flag to identify the media type, image or video
boolean isImage = i.getBooleanExtra("isImage", true);

if (filePath != null) {
// Displaying the image or video on the screen
previewMedia(isImage);
} else {
Toast.makeText(getApplicationContext(),
"Sorry, file path is missing!", Toast.LENGTH_LONG).show();
}

btnUpload.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// uploading the file to server
new UploadFileToServer().execute();
}
});

}

/**
* Displaying captured image/video on the screen
* */
private void previewMedia(boolean isImage) {
// Checking whether captured media is image or video
if (isImage) {
imgPreview.setVisibility(View.VISIBLE);
vidPreview.setVisibility(View.GONE);
// bimatp factory
BitmapFactory.Options options = new BitmapFactory.Options();

// down sizing image as it throws OutOfMemory Exception for larger
// images
options.inSampleSize = 8;

final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);

imgPreview.setImageBitmap(bitmap);
} else {
imgPreview.setVisibility(View.GONE);
vidPreview.setVisibility(View.VISIBLE);
vidPreview.setVideoPath(filePath);
// start playing
vidPreview.start();
}
}

/**
* Uploading the file to server
* */
private class UploadFileToServer extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
// setting progress bar to zero
progressBar.setProgress(0);
super.onPreExecute();
}

@Override
protected void onProgressUpdate(Integer... progress) {
// Making progress bar visible
progressBar.setVisibility(View.VISIBLE);

// updating progress bar value
progressBar.setProgress(progress[0]);

// updating percentage value
txtPercentage.setText(String.valueOf(progress[0]) + "%");
}

@Override
protected String doInBackground(Void... params) {
return uploadFile();
}

@SuppressWarnings("deprecation")
private String uploadFile() {
String responseString = null;

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL);

try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new ProgressListener() {

@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});

File sourceFile = new File(filePath);

// Adding file data to http body
entity.addPart("image", new FileBody(sourceFile));

// Extra parameters if you want to pass to server
entity.addPart("website",
new StringBody("www.androidhive.info"));
entity.addPart("email", new StringBody("abc@gmail.com"));

totalSize = entity.getContentLength();
httppost.setEntity(entity);

// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();

int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}

} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}

return responseString;

}

@Override
protected void onPostExecute(String result) {
Log.e(TAG, "Response from server: " + result);

// showing the server response in an alert dialog
showAlert(result);

super.onPostExecute(result);
}

}

/**
* Method to show alert dialog
* */
private void showAlert(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message).setTitle("Response from Servers")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do nothing
}
});
AlertDialog alert = builder.create();
alert.show();
}

}

Java配置:

package com.nkdroid.tinderswipe;

/**
* Created by Haze on 15.08.2016.
*/

public class Config {

// File upload url (replace the ip with your server address)
public static final String FILE_UPLOAD_URL = "http://http://nwstudio.esy.es/AndroidFileUpload/uploads/fileUpload.php";

// Directory name to store captured images and videos
public static final String IMAGE_DIRECTORY_NAME = "AndroidFileUpload";
}

最佳答案

我建议您不要为此目的使用 AsyncTask。代替 AsyncTask 尝试使用 Retrofit 2 发送图像

更新

这是我的项目 Retrofit2Sample显示 Retrofit 2 的用法。我相信这将有助于理解它的工作原理并展示如何使用这个很棒的 Rest 客户端。

关于java - 发送图片到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com