У меня есть эти доступные интерфейсы:Как загрузить изображение из PhoneGap в Web-интерфейс Asp.Net?
[HttpPost]
[CorsEnabled]
[ActionName("upstream")]
public DTO.Callback UploadPhoto(Stream data)
{
var m = new Logic.Components.User();
return m.UploadPhoto(data, Common.UserValues().Email);
}
[HttpPost]
[CorsEnabled]
[ActionName("upbyte")]
public DTO.Callback UploadPhoto(byte[] data)
{
var m = new Logic.Components.User();
return m.UploadPhoto(data, Common.UserValues().Email);
}
[HttpPost]
[CorsEnabled]
[ActionName("upfile")]
public DTO.Callback UploadPhoto(HttpPostedFileBase data)
{
var m = new Logic.Components.User();
return m.UploadPhoto(data, Common.UserValues().Email);
}
[HttpPost]
[CorsEnabled]
[ActionName("up")]
public DTO.Callback UploadPhoto(DTO.UserPhoto data)
{
var m = new Logic.Components.User();
return m.UploadPhoto(data, Common.UserValues().Email);
}
UserPhoto
класса
public class UserPhoto
{
public string Base64 { get; set; }
public byte[] Data { get; set; }
}
В коде позади, я стараюсь, чтобы преобразовать или получить эквивалентные байты [] каждый запрос данных.
Если бы я получил правильный байт изображения, тогда я должен идти.
В моем приложении PhoneGap, у меня есть эти коды:
функция, которая открывает камеру:
takePicture: function (success, error) {
var s = function (data) {
navigator.camera.cleanup();
(success || angular.noop)(data);
},
e = function (data) {
navigator.camera.cleanup();
(error || angular.noop)(data);
};
navigator.camera.getPicture(s, e,
{
quality: 100,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.CAMERA,
encodingType: Camera.EncodingType.PNG,
correctOrientation: true
}
);
}
Моя первая попытка является преобразование изображения в base64 строку и использовать «вверх» API ,
Он отлично подходит для низких quality
не более 50
. Но изображение становится почти неузнаваемым. Поэтому я установил quality
в 100
. И тогда возникает новая проблема, телефон висит ...
Поэтому я попытался использовать FileTransfer
. Вот код: использование
fileTransfer: function (filePath, serverUri, mimeType, params, success, error) {
var
u = $coreData.user.getSession()
;
var options = new FileUploadOptions();
options.fileKey = 'file';
options.mimeType = mimeType;
options.params = params;
options.chunkedMode = true;
options.headers = {
Connection: 'close',
Device: m.createDeviceHeader(),
'Authentication-Token': (u && u.SessionKey),
'Content-Type': 'application/json'
};
var ft = new FileTransfer();
ft.upload(filePath, encodeURI(serverUri), success, error, options);
}
Пример:
uploadFile: function (path) {
var def = $q.defer();
$coreUtility
.fileTransfer(path, $coreAPI.user.getUrl('upfile'), 'image/png', null,
function (success) {
def.resolve(m.callback(true, UPLOAD_PHOTO_SUCCESS, success));
},
function (error) {
def.reject(m.callback(false, UPLOAD_PHOTO_FAIL, error));
});
return def.promise;
}
Но я не был в состоянии загрузить файл, я всегда получить не поддерживается тип носителя форматировщик, а иногда пустая ссылка исключения. Я совершенно не в курсе.
Не могли бы вы объяснить это решение? спасибо – clintgh
см. мое редактирование ...... – fiberOptics