我试图从Android设备上传一个大文件我首先尝试使用asmx服务但是在尝试使用大文件时它不起作用所以我改为WCF服务但我实际上得到了相同的结果,服务器读取所有数据并将其写入磁盘,直到它读完整个流,我正在使用的服务器的代码是这样的:
[OperationContract]
[WebInvoke(Method="POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json,UriTemplate = "values/")]
Service1.Work GetData(Stream file);
public Work GetData(Stream file)
{
FileStream targetStream = null;
Stream sourceStream = file;
string uploadFolder = @"path";
using (targetStream
= new FileStream(uploadFolder, FileMode.Create,
FileAccess.Write, FileShare.None))
{
//read from the input stream in 65000 byte chunks
const int bufferLen = 6500;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
{
// save to output stream
targetStream.Write(buffer, 0, count);
}
targetStream.Close();
sourceStream.Close();
}
Work w = new Work();
w.status = "201 " ;
return w;
}
我还使用android中的以下代码将信息发布到服务器:
@Multipart
@POST("/values/")
void uploadMediaFile(@Part("description") string des,@Part("id") string id,@Part("file") TypedFile file,CallBack<ApiResponse> cb) throws RetrofitError
我想要的是在服务器上有一个文件并且一旦改装调用来自android就开始用块编写它,我已经尝试了许多东西并且无法在这里完成它是我的配置文件也许它有帮助
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2000000"/>
</system.web>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="transferconfig" sendTimeout="00:25:00" closeTimeout="00:25:23"
maxReceivedMessageSize="2000000000"
maxBufferSize="65536" transferMode="StreamedResponse" >
<security mode="None">
<transport clientCredentialType="None"
proxyCredentialType="None" realm="" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="Default" name="UploadFile.Service1">
<endpoint bindingConfiguration="transferconfig" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="UploadFile.IService1"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>