Tôi có tập lệnh tải lên tệp Flex sử dụng URLRequest để tải tệp lên máy chủ. Tôi muốn thêm hỗ trợ cho http xác thực (mật khẩu bảo vệ thư mục trên máy chủ), nhưng tôi không biết làm thế nào để thực hiện điều này - Tôi giả sử tôi cần phải mở rộng lớp bằng cách nào đó, nhưng làm thế nào để tôi là một chút bị mất.Flex 3 - cách hỗ trợ URL xác thực HTTPRequest?
Tôi đã cố sửa đổi những điều sau (thay thế HTTPService bằng URLRequest), nhưng điều đó không hiệu quả.
private function authAndSend(service:HTTPService):void{
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}
Tôi nên chỉ ra rằng tôi không hiểu biết khi nói đến ActionScript/Flex, mặc dù tôi đã quản lý thành công sửa đổi kịch bản tải lên một chút.
[Chỉnh sửa] - đây là một bản cập nhật về sự tiến bộ của tôi, dựa trên câu trả lời dưới đây, mặc dù tôi vẫn không thể có được điều này để làm việc:
Cảm ơn bạn đã hỗ trợ của bạn. Tôi đã cố gắng để thực hiện mã của bạn nhưng tôi đã không có bất kỳ may mắn. Các hành vi chung tôi gặp phải khi giao dịch với các vị trí được xác thực HTTP là với IE7 tất cả đều tốt nhưng trong Firefox khi tôi cố gắng tải tệp lên máy chủ, nó sẽ hiển thị lời nhắc xác thực HTTP - ngay cả khi được cung cấp đúng chi tiết, chỉ đơn giản là quầy hàng quá trình tải lên.
Tôi tin rằng lý do IE7 là ok xuống thông tin phiên/xác thực đang được chia sẻ bởi trình duyệt và thành phần Flash - tuy nhiên, trong Firefox đây không phải là trường hợp và tôi gặp phải hành vi trên.
Đây là chức năng upload cập nhật của tôi, kết hợp với những thay đổi của bạn:
private function pergress():void
{
if (fileCollection.length == 0)
{
var urlString:String = "upload_process.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&filetotal="+fileTotal;
if (ExternalInterface.available)
{
ExternalInterface.call("uploadComplete", urlString);
}
}
if (fileCollection.length > 0)
{
fileTotal++;
var urlRequest:URLRequest = new URLRequest("upload_file.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&obfuscate="+obfuscateHash+"&sessidpass="+sessionPass);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = new URLVariables("name=Bryn+Jones");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("testuser:testpass");
var credsHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
urlRequest.requestHeaders.push(credsHeader);
file = FileReference(fileCollection.getItemAt(0));
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
file.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
file.upload(urlRequest);
}
}
Như đã trình bày ở trên, tôi dường như được trải qua những kết quả tương tự có hoặc không có sửa đổi chức năng của tôi.
Tôi cũng có thể hỏi vị trí đặt crossdomain.xml - vì hiện tại tôi không có và không chắc chắn vị trí đặt nó.
crossdomain.xml nên được đặt trong thư mục gốc của ứng dụng web của bạn. Vì vậy, nếu các tệp bao gồm www.yoursite.com được đặt trong D: \ websites \ yoursite.com, đường dẫn của tệp phải là d: \ websites \ yoursite.com \ crossdomain.xml. –
Ngoài việc đặt tệp corssdomain.xml của bạn (bạn nên làm gì), bạn có biết phiên bản trình phát Flash nào bạn đã cài đặt không? Bạn đã chắc chắn rằng mình đang sử dụng Flash Player 10 chưa? (Có vẻ như phát hiện của tôi là Flash Player 9 không chơi tốt với tiêu đề Ủy quyền tùy chỉnh.) –
Cảm ơn sự giúp đỡ của bạn Christian - thật không may, tôi đã không có cơ hội thử nghiệm thêm (đã bị tràn ngập với một dự án khác) nhưng tôi sẽ cố gắng để tôi có cơ hội. – BrynJ