gpt4 book ai didi

android - 在android相机中上传捕获的图像的问题

转载 作者:太空狗 更新时间:2023-10-29 12:56:37 26 4
gpt4 key购买 nike

在我的应用程序中,我试图从我的设备捕获图像,并且我想将它上传到服务器。我正在关注发布的答案 here

以下是我启动相机的代码

 startBtn = (Button) findViewById(R.id.startBtn);
startBtn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
startCamera();
}
});
}

public void startCamera()
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
startActivityForResult( intent, 0 );
}

但是在我捕获并尝试上传时它崩溃了。在 logcat 中显示错误在 OnActivity 结果doFileUpload

以下是我的代码

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch( resultCode )
{
case 0:
break;

case -1:
onPhotoTaken();
break;
}
}

protected void onPhotoTaken()
{
doFileUpload(MediaStore.EXTRA_OUTPUT);
}

private void doFileUpload(String extraOutput)
{
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
DataInputStream inStream = null;
String urlServer = "http:XXXXXXXXXXXXXXXXXXXXXX/upload.php";
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1*1024*1024;
FileInputStream fileInputStream = new FileInputStream(new File(extraOutput) );
URL url = new URL(urlServer);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
outputStream = new
DataOutputStream( connection.getOutputStream() );
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"userfile\";filename=\"" + extraOutput +"\"" + lineEnd);
outputStream.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead > 0)
{
outputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens +lineEnd);
int serverResponseCode = connection.getResponseCode();
String serverResponseMessage = connection.getResponseMessage();
fileInputStream.close();
outputStream.flush();
outputStream.close();
}

请帮我改正我的错误......plz

最佳答案

我正在使用此代码将图像从我的设备上传到服务器

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v("Test", "IGA");
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
selectedImageUri =(Uri)data.getData();
AddCourtActivity.mImage.setImageURI(selectedImageUri);
selectedImagePath = getPath(selectedImageUri);
imagePath=selectedImagePath;
Log.v("Test","IGA "+imagePath);
} else if (requestCode == CAMERA_PIC_REQUEST) {

Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
imagePath=selectedImagePath;

Log.v("Test","IGA1 "+imagePath);
AddCourtActivity.mImage.setImageBitmap(thumbnail);
}
}
if (resultCode == RESULT_CANCELED) {

return;
}
}

public 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);
}
public String getPath1(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow("userImage"/*MediaStore.Images.Media.DATA*/);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}

//Use this class for upload image to server


public class FileUploader {

private String Tag = "UPLOADER";
private String urlString;// = "YOUR_ONLINE_PHP";
HttpURLConnection conn;
String exsistingFileName;
public String result;

public String uploadImageData(String serverImageTag) {// Server image tag
// may be
// courtImage[] or
// userImage
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
try {
// ------------------ CLIENT REQUEST

Log.e(Tag, "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);

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

dos.writeBytes(twoHyphens + boundary + lineEnd);
if (serverImageTag.equalsIgnoreCase("courtImage")) {
dos.writeBytes("Content-Disposition: post-data; name=courtImage[];filename="
+ exsistingFileName + "" + lineEnd);
} else if (serverImageTag.equalsIgnoreCase("userImage")) {
dos.writeBytes("Content-Disposition: post-data; name=userImage[];filename="
+ exsistingFileName + "" + lineEnd);
}
dos.writeBytes(lineEnd);

Log.e(Tag, "Headers are written");

// create a buffer of maximum size

int bytesAvailable = fileInputStream.available();
int maxBufferSize = 1000;
// int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bytesAvailable];

// read file and write it into form...

int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);

while (bytesRead > 0) {
dos.write(buffer, 0, bytesAvailable);
bytesAvailable = fileInputStream.available();
bytesAvailable = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
}

// send multipart form data necessary after file data...

dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

String serverResponseMessage = conn.getResponseMessage();
BufferedReader rd = new BufferedReader(new InputStreamReader(
conn.getInputStream()));

// String serverResponseCode = conn.
// String serverResponseMessage = conn.getResponseMessage();

while ((result = rd.readLine()) != null) {

Log.v("result", "result " + result);

Login.fbResponse = result;

}
// close streams
Log.e(Tag, "File is written");
fileInputStream.close();
dos.flush();
dos.close();
rd.close();
} catch (MalformedURLException ex) {
Log.e(Tag, "error: " + ex.getMessage(), ex);
}

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

// Parsing has finished.
return result;
}

public FileUploader(String existingFileName, String urlString) {

this.exsistingFileName = existingFileName;
this.urlString = urlString;

}

只需在构造函数中传递现有的文件名、url 字符串即可上传文件。

}

关于android - 在android相机中上传捕获的图像的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6149935/

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