免费图片托管,能够获得 url
free image hosting with the ability to get the url
我有大约 200 张图像要在我的 android 应用中使用。我想将它们上传到任何托管服务,然后使用 Glide 加载它们。
上传图像后,我希望它们都具有相同的基础 URL 例如 www.hosting。come/myprofile 并将文件名附加到它。
我尝试使用 Google firebase 和 imgur.com 以及 imagebb.com 来这样做,但是 none 对我有用。
有什么想法吗?
首先,您必须在虚拟主机的帐户文件管理器中创建一个图像文件夹。
注意:您必须在服务器上的 public_html 中创建文件夹。
您必须添加图片,如下所示。
之后,在您的 android 项目中,您可以通过 recyclerView 或 listview 加载图像。
首先将你的基地 url 存储在 strings.xml。
像这样:
<string name="host_url">https://laevorotatory-seesa.000webhostapp.com/wwol/</string>
<string name="image_url">https://laevorotatory-seesa.000webhostapp.com/wwol/product_images</string>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.Fragment_Home_User">
<ProgressBar
android:id="@+id/progressBar_user_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/images_recyclerView_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.womenwalkoflife.R;
import com.example.womenwalkoflife.adapters.Adapter_Product_User;
import com.example.womenwalkoflife.objects.Product_User;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Objects;
public class Fragment_Home_User extends Fragment {
private static final String TAG = "HomeUser";
private RecyclerView Images_RecyclerView;
private Adapter_Images imageAdapter;
private ArrayList<Image> imagesUrlList = new ArrayList<>();
private ProgressBar progressBar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment__home__user, container, false);
progressBar = rootView.findViewById(R.id.progressBar_user_id);
Images_RecyclerView = rootView.findViewById(R.id.images_recyclerView_id);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
Images_RecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
Images_RecyclerView.setLayoutManager(layoutManager);
imageAdapter = new Adapter_Images(this, imagesUrlList );
Images_RecyclerView.setAdapter(ViewProduct_Adapter);
GetAllImages();
return rootView;
}
private void GetAllImages() {
imagesUrlList.clear();
String url = getString(R.string.host_url) + "getImages.php";
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response != null) {
Log.e(TAG, response);
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("images_response");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
String imageName = obj.getString("image_name");
Image image = new Image(imageName);
imagesNameList.add(image);
}
} catch (JSONException e) {
e.printStackTrace();
}
Images_RecyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
imageAdapter.notifyDataSetChanged();
} else {
Images_RecyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
Images_RecyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
为图像创建 Class:
Image.java
public class Image {
private String imageFileName;
public Image(String imageFileName) {
this.imageFileName = imageFileName;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
}
同时创建适配器以在 recylerview 中设置值:
Adapter_Images.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.womenwalkoflife.R;
import com.example.womenwalkoflife.objects.Image;
import com.squareup.picasso.MemoryPolicy;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class Adapter_Images extends RecyclerView.Adapter<Adapter_Images.ImageViewHolder> {
Context context;
ArrayList<Image> imagesList;
public Adapter_Images(Context context, ArrayList<Image> imagesList) {
this.context = context;
this.imagesList = imagesList;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(context).inflate(R.layout.row_layout_images, parent, false);
return new ImageViewHolder(rootView);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
Image image = imagesList.get(position);
String url = context.getString(R.string.image_url) + image.getImageFileName();
Picasso.get().load(url).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE).into(holder.imageView);
}
@Override
public int getItemCount() {
return imagesList.size();
}
static class ImageViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView_id);
}
}
}
row_layout_images.xml
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageView_id"
android:layout_width="wrap_content"
android:src="@mipmap/ic_launcher"
android:layout_height="wrap_content"/>
现在您只需使用 phpmyadmin 将图像名称存储到数据库中,并在服务器上创建一个 getImages.php 文件,其中 returns 个图像名称并存储到 images_reponse JSON 数组。
希望对您有所帮助。
为此您可以轻松使用 Firebase 的云存储。
- 打开您的 Firebase 控制台并导航到您的项目。
- 下 "Develop"、select "Storage"。
- (可选)创建一个名为 "images".
的文件夹
- 单击 "Upload file" 按钮和 select 所有图像。
如果您有大量图片,上传可能需要一些时间,但它会起作用。
现在,在 Android 内,您可以非常轻松地获取 url。
// get a reference to your image whatever it's called
val ref = FirebaseStorage.getInstance().reference.child("images/my_image_001.png")
// get the actual download Url and load it into your imageView
ref.downloadUrl.addOnSuccessListener {
Glide.with(context)
.load(it)
.into(imageView)
}
我有大约 200 张图像要在我的 android 应用中使用。我想将它们上传到任何托管服务,然后使用 Glide 加载它们。 上传图像后,我希望它们都具有相同的基础 URL 例如 www.hosting。come/myprofile 并将文件名附加到它。
我尝试使用 Google firebase 和 imgur.com 以及 imagebb.com 来这样做,但是 none 对我有用。 有什么想法吗?
首先,您必须在虚拟主机的帐户文件管理器中创建一个图像文件夹。 注意:您必须在服务器上的 public_html 中创建文件夹。
您必须添加图片,如下所示。
之后,在您的 android 项目中,您可以通过 recyclerView 或 listview 加载图像。
首先将你的基地 url 存储在 strings.xml。
像这样:
<string name="host_url">https://laevorotatory-seesa.000webhostapp.com/wwol/</string>
<string name="image_url">https://laevorotatory-seesa.000webhostapp.com/wwol/product_images</string>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.Fragment_Home_User">
<ProgressBar
android:id="@+id/progressBar_user_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/images_recyclerView_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.womenwalkoflife.R;
import com.example.womenwalkoflife.adapters.Adapter_Product_User;
import com.example.womenwalkoflife.objects.Product_User;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Objects;
public class Fragment_Home_User extends Fragment {
private static final String TAG = "HomeUser";
private RecyclerView Images_RecyclerView;
private Adapter_Images imageAdapter;
private ArrayList<Image> imagesUrlList = new ArrayList<>();
private ProgressBar progressBar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment__home__user, container, false);
progressBar = rootView.findViewById(R.id.progressBar_user_id);
Images_RecyclerView = rootView.findViewById(R.id.images_recyclerView_id);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
Images_RecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
Images_RecyclerView.setLayoutManager(layoutManager);
imageAdapter = new Adapter_Images(this, imagesUrlList );
Images_RecyclerView.setAdapter(ViewProduct_Adapter);
GetAllImages();
return rootView;
}
private void GetAllImages() {
imagesUrlList.clear();
String url = getString(R.string.host_url) + "getImages.php";
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response != null) {
Log.e(TAG, response);
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("images_response");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
String imageName = obj.getString("image_name");
Image image = new Image(imageName);
imagesNameList.add(image);
}
} catch (JSONException e) {
e.printStackTrace();
}
Images_RecyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
imageAdapter.notifyDataSetChanged();
} else {
Images_RecyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
Images_RecyclerView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
为图像创建 Class:
Image.java
public class Image {
private String imageFileName;
public Image(String imageFileName) {
this.imageFileName = imageFileName;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
}
同时创建适配器以在 recylerview 中设置值:
Adapter_Images.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.womenwalkoflife.R;
import com.example.womenwalkoflife.objects.Image;
import com.squareup.picasso.MemoryPolicy;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class Adapter_Images extends RecyclerView.Adapter<Adapter_Images.ImageViewHolder> {
Context context;
ArrayList<Image> imagesList;
public Adapter_Images(Context context, ArrayList<Image> imagesList) {
this.context = context;
this.imagesList = imagesList;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(context).inflate(R.layout.row_layout_images, parent, false);
return new ImageViewHolder(rootView);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
Image image = imagesList.get(position);
String url = context.getString(R.string.image_url) + image.getImageFileName();
Picasso.get().load(url).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE).into(holder.imageView);
}
@Override
public int getItemCount() {
return imagesList.size();
}
static class ImageViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView_id);
}
}
}
row_layout_images.xml
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageView_id"
android:layout_width="wrap_content"
android:src="@mipmap/ic_launcher"
android:layout_height="wrap_content"/>
现在您只需使用 phpmyadmin 将图像名称存储到数据库中,并在服务器上创建一个 getImages.php 文件,其中 returns 个图像名称并存储到 images_reponse JSON 数组。
希望对您有所帮助。
为此您可以轻松使用 Firebase 的云存储。
- 打开您的 Firebase 控制台并导航到您的项目。
- 下 "Develop"、select "Storage"。
- (可选)创建一个名为 "images". 的文件夹
- 单击 "Upload file" 按钮和 select 所有图像。
如果您有大量图片,上传可能需要一些时间,但它会起作用。
现在,在 Android 内,您可以非常轻松地获取 url。
// get a reference to your image whatever it's called
val ref = FirebaseStorage.getInstance().reference.child("images/my_image_001.png")
// get the actual download Url and load it into your imageView
ref.downloadUrl.addOnSuccessListener {
Glide.with(context)
.load(it)
.into(imageView)
}