如何从PHP中的byte []获取image_name和image_tmp_name?

我正在从我的前端向我的域和PHP代码发送一个byte []。 我发送的字节数组名为“photo”,它像System.Text.Encoding.UTF8,“application / json”一样发送。 我的目标是将byte []转换为图像,然后将其上传到我的域文件夹(已存在)我是否需要从该字节[]获取image_name和image_tmp_name才能执行此操作? 我有点不确定我应该如何让它工作。</ p>

我目前有这个代码:</ p>

 &lt;?php  

$ value = json_decode(file_get_contents('php:// input'));

if(!empty($ value)){

print_r($ value);
}

?&gt;
</ code> </ pre>

使用此代码,print会给我一个包含byte []的大量文本。 </ p>

我现在如何从此byte []中获取image_name和image_tmp_name? 我的目标是将图像上传到我的域名映射(名为photoFolder,已经存在),代码如下所示:</ p>

  $ image_tmp_name =“”;  //我目前没有这个值
$ image_name =“”; //我目前没有这个值
if(move_uploaded_file($ image_tmp_name,“photoFolder / $ image_name”)){

echo“image successfully uploaded”;

}
</ code> </ pre >

我如何发送它:</ p>

  static public async Task&lt; bool&gt;  createPhotoThree(byte [] imgData)
{
var httpClientRequest = new HttpClient();

var postData = new Dictionary&lt; string,object&gt; ();

postData.Add(“photo”,imgData);

var jsonRequest = JsonConvert.SerializeObject(postData);

HttpContent content = new StringContent(jsonRequest,System.Text.Encoding。 UTF8,“application / json”);

var result = await httpClientRequest.PostAsync(“http://myadress.com/test.php”,content);
var resultString = await result.Content.ReadAsStringAsync( );
返回true;

}
</ code> </ pre>
</ div>

展开原文

原文

I am currently sending an byte [] from my frontend into my domain and PHP-code. The byte array that I am sending is named "photo" and it is sent like a System.Text.Encoding.UTF8, "application/json". My goal is to get the byte [] into an image and then upload it my domainfolder (that already exists) do I need to get the image_name and the image_tmp_name from that byte [] in order to do this? I am a bit uncertain on how exactly I should get this to work.

I currently have this code:

<?php 

$value = json_decode(file_get_contents('php://input'));

if(!empty($value)) {

print_r($value);
}

?>

With this code the print gives me a huge line of text containing the byte [].

How do I now get the image_name and image_tmp_name from this byte []? My goal is to upload the image on my domainmap (named photoFolder that already exists) with a code looking something like this:

$image_tmp_name = ""; //I currently do not have this value
$image_name = ""; //I currently do not have this value
if(move_uploaded_file($image_tmp_name, "photoFolder/$image_name")) {

echo "image successfully uploaded";

}

How i send it:

static public async Task <bool>  createPhotoThree (byte [] imgData)
{   
    var httpClientRequest = new HttpClient ();

    var postData = new Dictionary <string, object> ();

    postData.Add ("photo", imgData);

    var jsonRequest = JsonConvert.SerializeObject(postData);

    HttpContent content = new StringContent(jsonRequest, System.Text.Encoding.UTF8, "application/json");

    var result = await httpClientRequest.PostAsync("http://myadress.com/test.php", content);
    var resultString = await result.Content.ReadAsStringAsync ();
    return  true;

}

doujianzi8521
doujianzi8521 我刚刚设法使用你的C#代码,所以很快它将成为解决方案
大约 4 年之前 回复
dougong8012
dougong8012 在我的C#上我可以像imagepath那样发送一个字符串,如果这有助于这个过程,但也许你有一个不需要的解决方案
大约 4 年之前 回复
dongpu2476
dongpu2476 当然是!
大约 4 年之前 回复
duanpi7578
duanpi7578 叶氏。稍等一会儿。=)
大约 4 年之前 回复
douruoshen1449
douruoshen1449 好的好的。有没有办法让byte[]我发送到作为域图上的图像上传的PHP代码,或者我是否需要发送更多的东西以及字节来使其工作?
大约 4 年之前 回复
dongshan3806
dongshan3806 您无法从C#应用程序中获取image_name和image_tmp_name,因为您没有发送它。不要尝试上传该结果,请给我一分钟来测试您的代码。
大约 4 年之前 回复
dongzhi7641
dongzhi7641 我试图再次上传时计算机冻结了:(
大约 4 年之前 回复
dongmuyuan3046
dongmuyuan3046 我现在有一些文本,只是随机字母很大。用它更新了帖子。
大约 4 年之前 回复
douzhiba6873
douzhiba6873 当我试图在这里复制它时,计算机只是拉扯哈哈..我认为它包含太多的文字供我自己好好哈哈。我会尝试解决它。
大约 4 年之前 回复
dongyan7876
dongyan7876 是的我现在会得到它。当我尝试从前端复制它时,它会滞后很多。你稍等一会儿
大约 4 年之前 回复
ds3464
ds3464 我刚刚用我的图像发送方式更新了帖子(但它是c#而不是PHP)。
大约 4 年之前 回复
duande3134
duande3134 您正在谈论的标准方法用于多部分表单数据上载。除非数据是base64编码的,否则不能将byte[]打包到JSON文档中。如果要将原始二进制数据传递到PHP标准输入,则不需要使用json_decode。
大约 4 年之前 回复
dongmou1964
dongmou1964 实际上,我们需要查看您的应用程序平台代码,即创建数据并将数据发送到PHP
大约 4 年之前 回复
dsi36131
dsi36131 更新了帖子:它作为System.Text.Encoding.UTF8,“application/json”发送。我只是按照你从PHP表单上传“标准”图像的方式来完成它,你可以获得tmp_name和图像名称。我的目标是将其上传到我的域上的地图上,所以我假设我必须先以某种方式从中获取图像名称?
大约 4 年之前 回复
duanrongpai9556
duanrongpai9556 1.你在“字节数组中命名为'photo'”中的“命名”是什么意思?它是一个字节数组,它如何“命名”?2.在PHP中,字节数组只是字符串,并且可以以任何方式对其进行处理。3.你如何“发送”文件?你真的把它装在一些JSON结构中(这可能会破坏它,除非base64编码左右),或者json_decode只是货物崇拜编程的结果?
大约 4 年之前 回复
drsvw88664
drsvw88664 我从我的前端(一个应用程序平台)创建它,我发送到这个域和代码。
大约 4 年之前 回复
dongliao9018
dongliao9018 另外,如何创建调用字节数组的数据
大约 4 年之前 回复
doxp30826
doxp30826 告诉我们你得到的print_r($value)结果将其编辑成你的问题,不要发表评论
大约 4 年之前 回复

1个回答



这是解决方案。 像这样更改 C#</ code>方法:</ p>

  static public async Task&lt; bool&gt;  createPhotoThree(string imgName,byte [] imgData){
var httpClientRequest = new HttpClient();

var postData = new Dictionary&lt; string,object&gt;();

postData.Add(“photo_name”, imgName);
postData.Add(“photo_data”,imgData);

var jsonRequest = JsonConvert.SerializeObject(postData);

HttpContent content = new StringContent(jsonRequest,System.Text.Encoding.UTF8, “application / json”);

var result = await httpClientRequest.PostAsync(“http://myadress.com/test.php”,content);
var resultString = await result.Content.ReadAsStringAsync();

返回true;
}
</ code> </ pre>

php </ code>代码如下:</ p>

   $ input = file_get_contents('php:// input'); 
$ value = json_decode($ input,true);
if(!empty($ value)&amp;&amp;!empty($ value [' photo_data'])&amp;&amp;!empty($ value ['photo_name'])){
file_put_contents($ value ['photo_name'],base64_decode($ value ['photo_data']));
}
</ code> </ pre>

你看,当你打电话给 JsonConvert.SerializeObject(postData)</ code>你的 byte [] </ code>成为base64编码的字符串。 而你正在POST体内发送数据。 所以在 php </ code>方面你首先需要 json_decode()</ code> php:// input </ code>然后 base64_decode()</ code >图像字节。</ p>
</ div>

展开原文

原文

Here is solution. Change your C# method like this:

static public async Task<bool> createPhotoThree(string imgName, byte[] imgData) {
    var httpClientRequest = new HttpClient();

    var postData = new Dictionary<string, object>();

    postData.Add("photo_name", imgName);
    postData.Add("photo_data", imgData);

    var jsonRequest = JsonConvert.SerializeObject(postData);

    HttpContent content = new StringContent(jsonRequest, System.Text.Encoding.UTF8, "application/json");

    var result = await httpClientRequest.PostAsync("http://myadress.com/test.php", content);
    var resultString = await result.Content.ReadAsStringAsync();
    return true;
}

and you php code like this:

$input = file_get_contents('php://input');
$value = json_decode($input, true);
if (!empty($value) && !empty($value['photo_data']) && !empty($value['photo_name'])) {
    file_put_contents($value['photo_name'], base64_decode($value['photo_data']));
}

You see, when you calling JsonConvert.SerializeObject(postData) your byte[] becames a base64-encoded string. And you are sending that data directry in the POST-body. So at the php side you need to json_decode() of php://input first and then base64_decode() of image bytes.

dso15221
dso15221 上传到这里:stackoverflow.com/questions/38087574 / ...如果你想看看
大约 4 年之前 回复
douhezi2285
douhezi2285 别客气。
大约 4 年之前 回复
duanci1858
duanci1858 啊,我明白了! 我没有看到。 非常感谢你的帮助。 我肯定会赞成。 现在我必须弄清楚如何将图像上传到域文件夹,应该是简单的部分。 我可能会在半小时内发一个新帖子。 再次,非常感谢这个帮助。
大约 4 年之前 回复
duanba2001
duanba2001 $ value = json_decode($ input,true); 你看到第二个参数吗? 当它为真时,返回的值将是一个数组,而不是一个对象。 我已经测试了我的解决方案,它的工作=))
大约 4 年之前 回复
dongqiu3254
dongqiu3254 我认为此代码就在这里:file_put_contents($ value ['photo_name'],base64_decode($ value ['photo_data'])); 必须替换为:file_put_contents($ value-> photo_name,base64_decode($ value-> photo_data)); 如果我用这个代码替换那个代码我可以在那里达到回音调用但是我错了吗?
大约 4 年之前 回复
duanjizhan9353
duanjizhan9353 它并不重要,取决于你。 您可以从C#发送imagePath,或者您可以决定在php端放置图像的位置。
大约 4 年之前 回复
dongzhuo1930
dongzhuo1930 imgName应该是imagepath还是只是图像的名称? (只是为了澄清)
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐