- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用此功能发布多张图片
@Multipart
@POST("addad")
Call<resultsmodel> addad(
@Part List< MultipartBody.Part> files ,
@Part MultipartBody.Part file,
@Part("external_store") RequestBody external_store,
@Part("inner_store") RequestBody inner_store,
@Part("sectionId") RequestBody sectionId,
@Part("title") RequestBody title,
@Part("branchId") RequestBody branchId,
@Part("branch_type") RequestBody branch_type,
@Part("user") RequestBody user,
@Part("year") RequestBody year,
@Part("view_number") RequestBody view_number,
@Part("type") RequestBody type,
@Part("price") RequestBody price,
@Part("city_id") RequestBody city_id,
@Part("district_id") RequestBody district_id,
@Part("lat") RequestBody lat,
@Part("lon") RequestBody lon,
@Part("details") RequestBody details,
@Part("country") RequestBody country
);
我想知道如何在 php 中接收这个图像数组
最佳答案
以下是一些适用于 Android 的示例 PHP 和 Java 代码。请参阅 PHP 代码下方的 Android Java 示例代码。
PHP (upload.php):
<?php
$attachment = $_FILES['attachment'];
define ("MAX_SIZE","9000");
$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
// Method to extract the uploaded file extention
function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
// Method to extract the uploaded file parameters
function getFileAttributes($file)
{
$file_ary = array();
$file_count = count($file['name']);
$file_key = array_keys($file);
for($i=0;$i<$file_count;$i++)
{
foreach($file_key as $val)
{
$file_ary[$i][$val] = $file[$val][$i];
}
}
return $file_ary;
}
// Check if the POST Global variable were set
if(!empty($attachment) && isset($_POST['dirname']))
{
$dirname = $_POST['dirname'];
$uploaddir = "/var/www/html/uploads/".$dirname."/";
//Check if the directory already exists.
if(!is_dir($uploaddir)){
//Directory does not exist, so create it.
mkdir($uploaddir, 0777, true);
}
$file_attributes = getFileAttributes($attachment);
//print_r($file_attributes);
$count = count($file_attributes);
$response["status"] = array();
$response["count"] = $count; // Count the number of files uploaded
array_push($response["status"], $file_attributes);
$file_dirs = array();
foreach($file_attributes as $val)
{
$old_file = $val['name'];
$ext = getExtension($old_file);
$ext = strtolower($ext);
if(in_array($ext, $valid_formats))
{
$response["files"] = array();
$new_file = date('YmdHis',time()).mt_rand(10,99).'.'.$ext;
move_uploaded_file($val['tmp_name'], $uploaddir.$new_file);
$file_dirs[] = 'http://192.168.50.10/gallery/uploads/'.$dirname."/".$new_file;
}
else
{
$file_dirs[] = 'Invalid file: '.$old_file;
}
}
array_push($response["files"], $file_dirs);
echo json_encode($response);
}
?>
安卓:
上传服务接口(interface)FileUploadService.java:
public interface FileUploadService {
@Multipart
@POST("upload.php")
Call<ResponseBody> uploadMultipleFilesDynamic(
@PartMap() Map<String, RequestBody> partMap, /* Associated with 'dirname' POST variable */
@Part List<MultipartBody.Part> files); /* Associated with 'attachment[]' POST variable */
}
不同类上的 uploadPhotos() 方法,例如上传 Activity .java:
public void uploadPhotos(final List<Uri> uriList, final String folderName)
{
List<MultipartBody.Part> parts = new ArrayList<>();
for(Uri uri: uriList){
parts.add(prepareFilePart("attachment[]", uri)); // Note: attachment[]. Not attachment
}
RequestBody requestBodyFolderName = createPartFromString(folderName);
HashMap<String, RequestBody> requestMap = new HashMap<>();
requestMap.put("dirname", requestBodyFolderName); // Note: dirname
FileUploadService service = RetrofitClient.getApiService();
Call<ResponseBody> call = service.uploadMultipleFilesDynamic(requestMap, parts);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if(response.code() == 200)
{
// multiple dynamic uploads were successful
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
// errors
}
});
}
prepareFilePart() 方法:
private MultipartBody.Part prepareFilePart(String partName, Uri fileUri) {
File file = new File(fileUri.getPath());
// create RequestBody instance from file
RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), file);
// MultipartBody.Part is used to send also the actual file name
return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
}
createPartFromString() 方法:
private RequestBody createPartFromString(String descriptionString) {
return RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString);
}
最后是 RetrofitClient.java 类:
public class RetrofitClient {
private static final String ROOT_URL = "http://192.168.50.10/gallery/";
public RetrofitClient() { }
private static Retrofit getRetroClient() {
return new Retrofit.Builder()
.baseUrl(ROOT_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static FileUploadService getApiService() {
return getRetroClient().create(FileUploadService.class);
}
}
关于php - @Part List< MultipartBody.Part> 在 php 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44024529/
这确实是一个分开的用法问题,但欢迎提出有关如何实现此目的的其他想法。 我需要创建一个引导设备,设置如下: ( up to 4MB erase block size (EBS)): partitions
我想知道定义库及其内容的方式背后的原因是什么。更具体地说,库需要列出所有部分,并且这些部分需要说明它们所属的库。 这种双向对我来说似乎是不必要的,我希望从库中引用这些部件就足够了。此外,在库中添加或删
我对 lambda 表达式比较陌生,如果有人能解释为什么返回类型与我预期的不同,我会很高兴。 () -> MultipartBody.Part! 究竟是什么? Single.just{ val
我对 map reduce 输出部分文件有一些疑问。 1> part-r-*文件和map reduce输出的part-*文件有什么区别? part-r-* 是 mapper 的输出,part-* 是
我需要为移动应用程序创建 Rails API。 API 将发送和接收 json 格式的请求。 我还想创建一个后端来管理应用程序。后端将在桌面(管理员)上使用带有用户界面的 Rails。 我想知道是否有
我正在使用此功能发布多张图片 @Multipart @POST("addad") Call addad( @Part List files , @Part Multip
我有一个正在为项目开发的小型 Java 程序,它使用 JavaMail 从指定的 URI 中提取用户的收件箱,然后开始处理消息。 在 Outlook 中,属性菜单中有一个功能可以设置邮件的到期日期,它
我不完全理解 part 之间的区别/part of和 import/export在 Dart 中使用库时。例如: one.dart: library one; part "two.dart"; Cla
这个问题在这里已经有了答案: How can I upload files to a server using JSP/Servlet? (14 个答案) 关闭 6 年前。 我正在尝试通过 JSP
我想使用 spark 从 html 表单上传文件。以下是我处理发布路由的 java 函数: Spark.post("/upload", "multipart/form-data", (request,
对于我的 python 扩展,我有 C(来自嵌入式库)和 C++ 文件,它们被编译并链接在一起。只有 C++ 部分与 Python 接口(interface)(通过 SWIG)。这在 VS2015 的
我想使用子例程 sum_real 访问数组派生类型中数组的元素。即:对所有人的权重中的第一个条目求和。 type my_type real, dimension(:), allocatable
最近我将 sonarqube 从 4.0 升级到 4.3.3。升级后当我尝试运行 maven 构建时出现错误: Failed to execute goal org.codehaus.mojo:son
我拿了一个 wsp 文件,并像往常一样做了我的 stsadm -o addsolution。然后我进入中央管理->解决方案管理,结果一切正常。然后我部署了 Web 部件,到目前为止没有问题。 问题是当
在我的 Eclipse 插件中我有这个工作流: 在Package Explorer中获取当前选中的项目 做某事 在Package Explorer中获取当前选中的项目(同1) 做一些不同的事情 1(和
我正在尝试使用 Spring MVC 和 Thymeleaf 上传文件,但出现异常,提示未提供多部分配置。 这是我的 Thymeleaf 表格: Picture
我知道 map reduce 输出存储在名为 part-r-* for reducer 和 part-m-* for mapper 的文件中。 当我运行 mapreduce 作业时,有时会在单个文件中
我们在运行 CentOS 的 Virtual Box 上使用 Hadoop 的同时处理 BigData。每当我们执行某些程序时,它都会创建 2 个不同的文件 1) part-r-00000 和 2)
我在其他论坛上看到过有关此问题的相关帖子(请参阅: http://www.mrexcel.com/forum/showthread.php?t=372534 ),但我尝试了所有发现的方法,但没有成功。
我无法将图像上传到服务器。我在这里尝试了很多相关问题的解决方案,但没有一个对我有用。这是我的文件: SecurityApplicationInitializer: package co
我是一名优秀的程序员,十分优秀!