gpt4 book ai didi

android - 如何将图片上传到从图库中选择的服务器?

转载 作者:行者123 更新时间:2023-11-30 02:28:55 27 4
gpt4 key购买 nike

我正在创建应用程序,我需要添加从图库到服务器的上传图像,我已经问过这个但没有得到任何答案,这里是 How to upload image from gallary to server?问题是每当我从图库中选择并尝试发送时,它显示源文件不存在,有人可以帮忙吗?

最佳答案

开始 Intent 从图库中选择图像文件...

startActivityForResult(new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI),54);

在 Activity 结果中获取文件 URI...

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (resultCode != RESULT_CANCELED) {
try {
if (requestCode == 54 && resultCode != 0) {
if (intent != null) {
Uri selectedImage = intent.getData();
} else {
Toast.makeText(getApplicationContext(),
"Could not load image",
Toast.LENGTH_SHORT).show();
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}

从 URI 获取文件字节...

private byte[] GetFileBytes(Uri uri)
{
ByteArrayOutputStream bos = new ByteArrayOutputStream(200000);
InputStream imageStream;
try {
imageStream = getContentResolver().openInputStream(uri);
byte[] buffer;
buffer = new byte[100000];
while ((imageStream.read(buffer)) != -1) {
bos.write(buffer);
}
} catch (Throwable e) {
e.printStackTrace();
}
return bos.toByteArray();
}

从字节数组中获取 MultipartEntity...

private MultipartEntity getEntity(byte[] bytes)
{
MultipartEntity entity = new MultipartEntity();
InputStream in = new ByteArrayInputStream(bytes);
ContentBody bin = new InputStreamBody(in, "Image_" + c.getTimeInMillis() + ".jpg");
entity.addPart("image_query_string_variable_name", bin);
}

MultipartEntity 是 httpmime 的一个类。您可以通过谷歌搜索轻松找到 JAR。您需要从项目属性中将此 jar 文件添加到您的项目中。

发布到服务器...

private void PostData(MultipartEntity entity)
{
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 20000);
HttpConnectionParams.setSoTimeout(httpParameters, 20000);
DefaultHttpClient client = new DefaultHttpClient(httpParameters);

HttpPost request = new HttpPost("http://www.you_server_url.com/someFileName.php");
request.setEntity(entity);

HttpResponse response = null;
response = client.execute(request);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
//
// Process the returned result from server...
//
}

更多编辑:

byte[] fileBytes = null;
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (resultCode != RESULT_CANCELED) {
try {
if (requestCode == 54 && resultCode != 0) {
if (intent != null) {
Uri selectedImage = intent.getData();
fileBytes = GetFileBytes(selectedImage);
} else {
fileBytes = null;
Toast.makeText(getApplicationContext(),
"Could not load image",
Toast.LENGTH_SHORT).show();
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}

// when button is clicked...
public void onClick(View v)
{
if(fileBytes != null)
{
MultipartEntity entity = getEntity(fileBytes);
PostData(entity);
}
}

祝你好运。 :)

关于android - 如何将图片上传到从图库中选择的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27543505/

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