2015-02-17 3 views
2

У меня есть вопрос, который я не могу объяснитьWebservice PHP не получает base64 большое изображение

У меня есть C# программы, отправить изображение (скриншот всей веб-странице некоторого URL) кодирование в base64

static string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      // Convert Image to byte[] 
      image.Save(ms, format); 
      byte[] imageBytes = ms.ToArray(); 

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

    // image is typeof Bitmap 
    string myImageData = ImageToBase64(image, System.Drawing.Imaging.ImageFormat.Jpeg); 

    using (WebClient client = new WebClient()) 
     { 
      try 
      { 

       byte[] response = client.UploadValues("http://production/ws/imageBuilder", new NameValueCollection() 
       { 
        { "myImageData", HttpUtility.UrlEncode(this.myImageData) } 
        { "Url_", url.Authority }, 
        { "token", ImageHash } 
       }); 

       Debug.WriteLine("Server Said: " + System.Text.Encoding.Default.GetString(response)); 

       byte[] response2 = client.UploadValues("http://localhost/ws/imageBuilder", new NameValueCollection() 
       { 
        { "myImageData", HttpUtility.UrlEncode(this.myImageData) } 
        { "Url_", url.Authority }, 
        { "token", ImageHash } 
       }); 

       Debug.WriteLine("Server Said: " + System.Text.Encoding.Default.GetString(response2)); 
      } 
      catch(Exception e) {Debug.WriteLine(e.Message);} 
     } 

на PHP стороне у меня есть только для тестирования

 echo "length before decode ".strlen($_POST['myImageData']); 
     $imageData = base64_decode(urldecode($_POST['myImageData'])); 
     echo "length after decode ".strlen($imageData); 

Который возвращающегося с большим изображением (Exemple 1280 х 10 000)

[4908] Server Said: length before decode 0 length after decode 0 
[4908] Server Said: length before decode 1333258 length after decode 925151 

Так что на моем локальном сервере WAMP (в Windows 7) я получаю изображение, но в процессе производства (в Linux) ничего не получаю.

Но с «маленьким» изображением для примера размер «1280 x 1024» все в порядке, моя переменная $_POST['myImageData'] не пуста на производстве, она отлично работает.

[4908] Server Said: length before decode 66292 length after decode 46210 
[4908] Server Said: length before decode 66292 length after decode 46210 

ОБНОВЛЕНИЕ: Изображений маленькие J (между 200ko и 1.5mo).

на моем php.in в производстве У меня есть

upload_max_filesize = 20M 
post_max_size = 18M 

Мой Apache производства является mod_proxy

+0

Вы используете лимит загрузки? Если вы отправите изображение как «multipart/form-data», вам может быть повезло больше. Затем веб-сервер предоставит вам сообщение об ошибке как файл-ввод вместо файла. Еще одно замечание - кодирование base64 раздувает ваши данные примерно на 33%. – Halcyon

+0

Мой post_max_size достаточно. Это всего лишь изображение в формате JPEG, между 200ko и 1.5 mo:/Я попробую multipart/form-data – amdev

ответ

0

Если бы мне пришлось рисковать догадку, я бы сказал проверить параметр «post_max_size» в вашем php.ini. Вероятно, он установлен на сервере linux ниже, чем сервер WAMP.

+0

Мой post_max_size достаточно. Это всего лишь изображение в формате JPEG, приблизительно 1mo: / – amdev