PDA

View Full Version : مشکل در ارسال ناقص تصویر بصورت رشته به سرور



samiasoft
جمعه 12 مهر 1398, 16:44 عصر
سلام وقت بخیر

میخواستم تصویری را از سی شارپ به سمت سرور اپلود کنم

سمت سرور بدین صورت در php دستورات رو نوشتم :

<?php $image=$_POST["image"];
$file_name=date("Y-m-d-H-i-s");
$target_dir = "uploads/";$target_file = $target_dir . $file_name.".jpg";
if (file_put_contents($target_file, base64_decode($image))) {
$status="ok";
} else { $status="error"; }
echo $status;
?>

در سی شارپ هم تصویر رو بدین صورت به رشته تبدیل کردم :
public string getStringImage(string Path) {
using (System.Drawing.Image image = System.Drawing.Image.FromFile(Path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();


// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
}

و بدین صورت با متد post سمت سرور ارسال کردم :
string img = getStringImage(@"E:\1.jpg");

var request = (HttpWebRequest)WebRequest.Create("................/uploader.php");

var postData = "image=" + img;


var data = Encoding.ASCII.GetBytes(postData);


request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;


using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}


var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToE nd();

اما متاسفانه تصویر اپلود شده بصورت ناقص اپلود میشه...یعنی حجمش کمتر از حجمی است که تصویر اولیه داره....موقع اجرا هم قسمتی از عکس نمایش داده میشه.

من اومدم سمت سرور رشته ای که ارسال میشد رو echo کردم دیدم در رشته ای که ارسال کرده قسمت هایی که دارای کاراکتر + هست تبدیل به فاصله شده و به خاطرهمین هست که عکس ناقص نمایش داده میشه.
بخاطرهمین فکر میکنم مشکل از کدهای سمت سی شارپ من باشه....نظری دارید در این باره؟

samiasoft
جمعه 12 مهر 1398, 18:41 عصر
اومدم سمت سرور همانطور که میگفتم بجای کاراکتر + با فاصله جایگزین میشد دوباره جایگزینش کردم :

$image=str_replace(" ","+",$image);
و الان به درستی اپلود شد....اما چرا اینطور جایگزین شده؟مشکل در تبدیل من هست ؟:متفکر:

Mahmoud.Afrad
جمعه 12 مهر 1398, 22:06 عصر
محتوا را از نوع application/base64 معرفی کنید. سمت پی اچ پی چک کنید ببینید درست میشه یا نه

samiasoft
جمعه 12 مهر 1398, 23:31 عصر
محتوا را از نوع application/base64 معرفی کنید. سمت پی اچ پی چک کنید ببینید درست میشه یا نه

ممنون از توجهتون

متاسفانه در این حالت با اینکه خطایی هم نمیده اما عکس با حجم صفر اپلود میشه!
request.ContentType = "application/base64";

Mahmoud.Afrad
شنبه 13 مهر 1398, 06:56 صبح
چون در url کاراکتر + به معنی کاراکتر space هست این اتفاق میفته. شما داده رو کد کنید که مشکلی پیش نیاد و در طرف php هم + دریافت بشه
var postData = "image=" + System.Net.WebUtility.UrlEncode(img);

samiasoft
شنبه 13 مهر 1398, 16:41 عصر
چون در url کاراکتر + به معنی کاراکتر space هست این اتفاق میفته. شما داده رو کد کنید که مشکلی پیش نیاد و در طرف php هم + دریافت بشه
var postData = "image=" + System.Net.WebUtility.UrlEncode(img);

درسته من این قسمت رو حواسم نبوده...متشکرم مشکل حل شد