作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建应用程序,我需要添加从图库到服务器的上传图像,我已经问过这个但没有得到任何答案,这里是 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/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!