gpt4 book ai didi

android - 使用 Volley Library 在服务器上上传文件或图像

转载 作者:搜寻专家 更新时间:2023-11-01 09:38:37 24 4
gpt4 key购买 nike

我无法使用 Volley 库在服务器上上传文件或多张图片。

API 的响应如下:

{
"id": 1,
"data": {
"no": "1019",
"status": "publish",
"condition": Default,
"quantity": 2,
"category": "default",
"images": [
"http://demo/test1/wp-content/uploads/12/hello.jpg",
"http://demo/test1/wp-content/uploads/12/Penguins-1.jpg",
]
}
}

有没有人有使用 Volley 库上传多个文件或图像的解决方案?

下面是一些关于 postman 使用 post 响应的图片

最佳答案

我创建了一个使用 PHP 上传两个以上图像的演示。请参阅下面的代码。

一步步走


第一步

1) Main Activity 有两个 ImageView 并从 drawable 文件夹中设置图像

2) 更改网址

3) getStringImage()用于Bitmap转String(可以查看日志)

4) 使用 Volley 库上传。

public class MainActivity extends AppCompatActivity {

ImageView imageView1, imageView2;
Button uploadImage;
String URL = "http://192.168.1.85/DemoUploadTwoImage/post.php/";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// XML Declaration
imageView1 = (ImageView) findViewById(R.id.mimageView);
imageView2 = (ImageView) findViewById(R.id.mimageView1);
uploadImage = (Button) findViewById(R.id.mButton);

// XML Set Images To ImageView

imageView1.setImageResource(R.drawable.loading2);
imageView2.setImageResource(R.drawable.loading1);


uploadImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {


UploadTwoImages();
}
});
}

public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}

public void UploadTwoImages() {
imageView1.buildDrawingCache();
imageView2.buildDrawingCache();

Bitmap bitmap1 = imageView1.getDrawingCache();
Bitmap bitmap2 = imageView2.getDrawingCache();

final String imageOne = getStringImage(bitmap1);
final String imageTwo = getStringImage(bitmap2);

Log.e("Image One", imageOne);
Log.e("Image Twol", imageTwo);

final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Registration is in Process Please wait...");
pDialog.show();

StringRequest stringRequest = new StringRequest(Request.Method.POST,
URL,
new Response.Listener<String>() {

@Override
public void onResponse(String response) {
pDialog.hide();
String result = response;
Log.e("Result", response);

}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error", error.getMessage());
pDialog.hide();

}
}) {

@Override
protected Map<String, String> getParams() {


Map<String, String> params = new HashMap<String, String>();
params.put("getdata", "UploadImage");


params.put("insert_image_one", imageOne);
params.put("insert_image_two", imageTwo);


//Bank Information

return params;
}


};

//Adding request to request queue
VolleyAppController.getInstance().addToRequestQueue(stringRequest);

}
}

第 2 步

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<ImageView
android:id="@+id/mimageView"
android:layout_width="150dp"

android:layout_height="150dp"
android:layout_gravity="center" />

<ImageView
android:id="@+id/mimageView1"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:layout_margin="10dp" />

<Button
android:id="@+id/mButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="UploadImage"
android:textSize="20dp" />
</LinearLayout>

第 3 步 list 文件

1) 关注这一行:android:name=".VolleyAppController"

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jmtechnologies.uploadmultipleimagevolley">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".VolleyAppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

第四步

1) 添加VolleyAppController。这是 Volley 的类文件。

public class VolleyAppController extends Application {

// this methode is for multidex install For Map and google Api


public static final String TAG = VolleyAppController.class
.getSimpleName();

private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;

private static VolleyAppController mInstance;

@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}

public static synchronized VolleyAppController getInstance() {
return mInstance;
}

public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}

return mRequestQueue;
}

public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue,
new LruBitmapCache());
}
return this.mImageLoader;
}

public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}

public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}

public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}

第 5 步

1) 添加LruBitmapCache类文件。2) 非强制性。

public class LruBitmapCache extends LruCache<String, Bitmap> implements
ImageLoader.ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;

return cacheSize;
}

public LruBitmapCache() {
this(getDefaultLruCacheSize());
}

public LruBitmapCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}

@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}

@Override
public Bitmap getBitmap(String url) {
return get(url);
}

@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}

7) 服务器端文件 db_connect.php

<?php
define('HOST','localhost');
define('USER','root');
define('PASS','Root@123');
define('DB','uploadTwoImages');

$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
?>

8) 服务器端文件 post.php

<?php

include 'db_connect.php';
$datetime = date('d/m/Y');
$request=$_REQUEST['getdata'];

// customer Registration form
if($request=="UploadImage")
{
//mysqli_set_charset( $con, 'utf8');

$image1 =$_REQUEST['insert_image_one'];

$image2 =$_REQUEST['insert_image_two'];
$imageName1="image1.jpg";
$imageName2="image2.jpg";



$Image1_path = "Uploads/$imageName1";
$Image2_path = "Uploads/$imageName2";

$actualpath = "http://192.168.1.85/DemoUploadTwoImage/$Image1_path";
$actualpath1 = "http://192.168.1.85/DemoUploadTwoImage/$Image2_path";


$m=mysqli_query($con,"INSERT INTO `UserImage`(`imageOne`, `imageTwo`) VALUES ('$actualpath','$actualpath1')");

if($m)
{
file_put_contents($Image1_path,base64_decode($image1));
file_put_contents($Image2_path,base64_decode($image2));
$flag['Code']='Data Inserted';
}
print(json_encode($flag));
}
else
{

$flag['Error']='2';
print(json_encode($flag));

}
?>

9) Input Android

10) Output File on local server

关于android - 使用 Volley Library 在服务器上上传文件或图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326223/

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