文件的数据类型用于将二进制数据发布到各种API调用中。每个包含至少一个文件类型参数的API调用必须满足以下要求:
-
必须使用HTTP POST方法。
-
必须形成如HTML规范所述的multipart/form-data请求。
示例
Java HttpClient
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(webServerUrl);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName("UTF-8"));
StringBody taskPart;
StringBody formatPart;
StringBody saveToTransMemoryPart;
StringBody setCompletedPart;
ByteArrayBody fileContentPart;
// ... 用数据填充变量 ... //
reqEntity.addPart("task", taskPart);
reqEntity.addPart("format", formatPart);
reqEntity.addPart("saveToTransMemory", saveToTransMemoryPart);
reqEntity.addPart("setCompleted", setCompletedPart);
reqEntity.addPart("bilingualFile", fileContentPart);
httpPost.setEntity(reqEntity);
C++ Qt
QHttpMultiPart* multiPartData = new QHttpMultiPart( QHttpMultiPart::FormDataType );
QBuffer* buffer = new QBuffer(multiPartData);
buffer->open(QIODevice::WriteOnly);
// ... 用数据填充缓冲区 ... //
writer.writeTo( buffer );
buffer->close();
QHttpPart filePart;
filePart.setHeader( QNetworkRequest::ContentTypeHeader, QVariant( "application/octet-stream" ) );
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(QString("form-data; name=\"bilingualFile\"; filename=\"") + model->getFileInfos()[0].original + "\""));
buffer->open(QIODevice::ReadOnly);
filePart.setBodyDevice( buffer );
multiPartData->append( filePart );