gpt4 book ai didi

c# - 创建一个接受文件(Stream)的网络服务不需要其他参数

转载 作者:行者123 更新时间:2023-11-29 10:45:52 28 4
gpt4 key购买 nike

我有一个要上传到 Web 服务的文件,但它需要额外的参数,因此我创建了一些具有关联名称:值对的隐藏字段,以推送到服务器请求。但问题在于服务的定义。

[错误]

契约“IFormServices”中的操作“NewImage”有多个请求主体参数,其中一个是流。 Stream为参数时,body中不能有其他参数。

[界面]

[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json)]
string NewImage(Stream data, string server,string datasource, string document, string image_id);

[定义]

public string NewImage(Stream data, string server, string datasource, string document, string image_id)
{
//this should, similar to others, need a server, datasource, and some sort of document in which to append the images.
WebClient wsb = new WebClient();
string str = "_URL_";
byte[] byte_data = new byte[data.Length];
data.Read(byte_data, 0, byte_data.Length);
byte[] response = wsb.UploadData(str,"POST",byte_data);
string retVal = Convert.ToString(response);
//want to return a JSON.serialized dictionary of: given image_id + id returned from response.
Dictionary<string, object> retDict = new Dictionary<string, object>();
retDict["filename"] = image_id;
retDict["id"] = "";
//return new JavaScriptSerializer().Serialize(json);
return "-1";
}

[javascript 代码]

var $form = $("<form />").attr({
method: "POST",
enctype: "multipart/form-data",
target: "image_processing",
action: "webservices/FormServices.svc/NewImage",
id: "push_image_to_server"
} ).appendTo( "body" );
var im_id = $( this ).attr( "image_id" );
$( this ).appendTo( "form#push_image_to_server" );
$( "<input type='hidden' />" ).attr( { name: "server", value: BASE_URL } ).appendTo( $form );
$( "<input type='hidden' />" ).attr( { name: "datasource", value: SELECTED_DATASOURCE } ).appendTo( $form );
$( "<input type='hidden' />" ).attr( { name: "document", value: SELECTED_DOCUMENT } ).appendTo( $form );
$( "<input type='hidden' />" ).attr( { name: "image_id", value: im_id } ).appendTo( $form );
$("iframe#image_processing").bind("load", function (a,b,c) {
console.log("SUCCESS", arguments);
$( "iframe#image_processing" ).unbind( "load", function (a,b,c)
{
console.log( arguments );
_IMAGE_UPLOADS_[a["filename"]] = a["id"];
} );
$( "form#push_image_to_server" ).remove();
} );

所以我想找出一种方法将 4 个字符串 + 一个文件发送到服务器。

这将如何完成?

编辑:将错误代码放在顶部。

最佳答案

这篇文章:How to: Create a Service That Accepts Arbitrary Data using the WCF REST Programming Model描述了另一种发布流和一些数据的方法。

它们展示了如何将文件名(但您可以添加和/或用任何字符串参数替换它)与文件一起发送。

契约(Contract)是:

[ServiceContract]
public interface IReceiveData
{
[WebInvoke(UriTemplate = "UploadFile/{strParam1}/{strParam2}")]
void UploadFile(string strParam1, string strParam2, Stream fileContents);
}

公开的服务将通过 POST 接收流以及定义的参数。

关于c# - 创建一个接受文件(Stream)的网络服务不需要其他参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730610/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com