【发布时间】:2015-03-17 12:57:33
【问题描述】:
我在尝试将文件上传到我们拥有的现有 ASMX 服务时遇到问题(请参阅下面的 C#)。我们目前有一个 Silverlight 应用程序,它使用该服务没有任何问题,但我没有成功获得我们使用 AJAX 来利用该服务的新应用程序。
我已经从这些中提取了一些建议以供参考:
有一个触发此功能的 type="file" :
function ArrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
for (var xx = 0, len = bytes.byteLength; xx < len; ++xx) {
binary += String.fromCharCode(bytes[xx]);
}
return window.btoa(binary);
// return btoa(String.fromCharCode.apply(null, bytes)); // Note: tried this but always get an error "Maximum call stack size exceeded"
}
function DoUpload(files) {
var reader = new FileReader();
reader.onload = function (e) {
var data = {
file: ArrayBufferToBase64(e.target.result),
extension: file.name.substr(file.name.lastIndexOf("."))
};
$.ajax({
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
url: "{baseurl}" + "FileInfo.asmx/UploadFile",
contentType: "application/json",
data: JSON.stringify(data),
dataType: 'json',
type: "POST",
success: function (response: ITempDocumentInfo) {
dfd.resolve();
},
error: function (e) {
console.error(e);
}
});
};
reader.readAsArrayBuffer(file);
}
服务位于 SharePoint 中,如下所示:
[WebService(Namespace = "http://www.blah.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class FileInfo : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public TempDocumentInfo AddScannedItem(string instanceId, string uri, string itemKey, string data, string extension)
{
byte[] bytes = new byte[data.Length * sizeof(char)];
System.Buffer.BlockCopy(data.ToCharArray(), 0, bytes, 0, bytes.Length);
var stream = new MemoryStream(bytes);
.
.
.
}
}
一旦我有了 C# 中的数据,我似乎无法用它做任何事情。例如。上传和处理bmp图片会抛出异常:
var blah = System.Windows
.Media
.Imaging
.BmpBitmapDecoder
.Create(stream,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.None);
我没有正确生成 AJAX 请求吗?
【问题讨论】:
-
您说它会引发异常,但您没有说明异常是什么。如果我们要帮助你,你应该告诉我们那是什么。
-
让我复制一下,很快就会发回。
标签: c# jquery ajax web-services if-statement