Russian Qt Forum

Qt => Работа с сетью => Тема начата: troorl от Декабрь 04, 2007, 03:06



Название: Аплоад файла и ошибка с Content-type
Отправлено: troorl от Декабрь 04, 2007, 03:06
Привет. Я хочу загружать некий файл (картинка, png) на сервер.
Форма отправки выглядит так:
Код:
<form method=post action="/en/upload/" enctype="multipart/form-data">
<tr>
<input type=file name=file></td>
<input class=b type=submit value="Upload"></td>
</form>
Формирую заголовок и загружаю. Если не указывать Content-type файла, то сервер ругается на неверный тип файла (логично). Если указать "Content-type: image/png", то сервер возвращает ошибку. Если указать любой другой тип файла, то сервер просто говорит, что тип неверный (как в первом случае). Что же делать, чтобы загрузить этот злосчастный PNG?
Код:
	QString boundary = "AaB03xGtroorl3984";
QHttpRequestHeader header("POST", "/en/upload/", 1, 1);
header.setValue("Host", "piccy.info");
header.setValue("Content-type", "multipart/form-data; boundary=" + boundary);
header.setValue("Cache-Control", "no-cache");
header.setValue("Accept","*/*");

QByteArray byt(openFilesPath.toUtf8());
bytes.append("--" + boundary + "\r\n");
bytes.append("content-disposition: ");
bytes.append("form-data; name=\"file\"; filename=\"" + byt + "\"\r\n");
//bytes.append("Content-type: image/png\r\n");
bytes.append("Content-Transfer-Encoding: binary\r\n");
bytes.append("\r\n");
bytes.append(userfile->readAll());
userfile->close(); // the file is opened earlier in the code
bytes.append("\r\n");
bytes.append("--" + boundary + "--");
int contentLength = bytes.length();
header.setContentLength(contentLength);

http->setHost("piccy.info");
bool httpRequestAborted = false;
httpGetId = http->request(header, bytes);


Название: Re: Аплоад файла и ошибка с Content-type
Отправлено: Kainit от Декабрь 05, 2007, 11:05
1. В своё время парился с этим, в итоге разозлился, прибил мультипартовость и всё заработало.

2. http://ws.apache.org/commons/tcpmon/  (http://ws.apache.org/commons/tcpmon/)
 - возьмите эту тулзу и найдите сайтик, на который можно с веб-формы залить несколько картинок
 - настройте браузер, чтобы он этой тулзой как проксей пользовался
 - протрейсите что будет в результате и найдёте ошибку у себя...


Название: Re: Аплоад файла и ошибка с Content-type
Отправлено: izoomer от Сентябрь 24, 2008, 18:23
Привет. Я хочу загружать некий файл (картинка, png) на сервер.
Форма отправки выглядит так:
Код:
<form method=post action="/en/upload/" enctype="multipart/form-data">
<tr>
<input type=file name=file></td>
<input class=b type=submit value="Upload"></td>
</form>
Формирую заголовок и загружаю. Если не указывать Content-type файла, то сервер ругается на неверный тип файла (логично). Если указать "Content-type: image/png", то сервер возвращает ошибку. Если указать любой другой тип файла, то сервер просто говорит, что тип неверный (как в первом случае). Что же делать, чтобы загрузить этот злосчастный PNG?
Код:
	QString boundary = "AaB03xGtroorl3984";
QHttpRequestHeader header("POST", "/en/upload/", 1, 1);
header.setValue("Host", "piccy.info");
header.setValue("Content-type", "multipart/form-data; boundary=" + boundary);
header.setValue("Cache-Control", "no-cache");
header.setValue("Accept","*/*");

QByteArray byt(openFilesPath.toUtf8());
bytes.append("--" + boundary + "\r\n");
bytes.append("content-disposition: ");
bytes.append("form-data; name=\"file\"; filename=\"" + byt + "\"\r\n");
//bytes.append("Content-type: image/png\r\n");
bytes.append("Content-Transfer-Encoding: binary\r\n");
bytes.append("\r\n");
bytes.append(userfile->readAll());
userfile->close(); // the file is opened earlier in the code
bytes.append("\r\n");
bytes.append("--" + boundary + "--");
int contentLength = bytes.length();
header.setContentLength(contentLength);

http->setHost("piccy.info");
bool httpRequestAborted = false;
httpGetId = http->request(header, bytes);

а мне помог пример с хидером.
Спасибо.


Название: Re: Аплоад файла и ошибка с Content-type
Отправлено: Admin от Сентябрь 24, 2008, 20:07
есть еще полезная тулза
wireshark aka ethereal